Когда понадобится git -ребаза?
Каждый раз, когда я читаю документацию git -rebase, я теряюсь. Он чувствует для меня как своего рода операцию на низком уровне (читай: темная магия).
Цитирование документов:
Предположим, что существует следующая история и текущая ветка - это "тема":
A---B---C topic
/
D---E---F---G master
С этого момента результат любой из следующие команды:
git rebase master
git rebase master topic
:
A'--B'--C' topic
/
D---E---F---G master
Вопрос: Зачем кому-то это делать?
Во-первых, кажется, что "переписать" историю, как будто ветка началась в другой точке; по существу, история фиксации будет "кучей лжи".
Другой момент, он не чувствует себя в безопасности. Я попробовал это однажды, получил массу конфликтов, и все ад сломался. Я точно не помню, как я разрешил этот ад, но если я правильно помню, это было на временной тестовой ветке или что-то в этом роде.
Другой вопрос: Я пропустил какой-то действительно классный/экономящий время набор функций, не зная, как использовать git-rebase
?
EDIT:
Связанный вопрос: Отмена git rebase
Ответы
Ответ 1
Во-первых, в git нет опасных операций. rebase имеет операцию прерывания, и все операции делают это в reflog, поэтому вы можете отменить все. На самом деле это совершенно противоположное.
Он позволяет вам свободно совершать любое время, не требуя "хорошей" сборки, пока вы на пути к ее созданию. Обновления, которые вы публикуете, могут быть чистыми, сбрасывая все шаги, предпринятые вами в пути, в одно коммит.
Я использую rebase все время (нередко через pull, который я обычно настроил на rebase после фазы выборки). Не думайте об этом как о переписывании истории - подумайте об этом как о том, как предоставить вам инструмент для очистки вашего черновика, прежде чем публиковать его.
Через год, будет ли важно, чтобы кто-либо из вашего проекта знал, что вы действительно начали эту функцию против ревизии E
, а не версии G
?
Ненужные рекурсивные слияния скрывают более важные части истории.
Ответ 2
Вам нужно использовать его, например, если вы хотите отправить патч для кода, который кто-то еще изменил. Например, если вы отделились от версии 1.56 программного обеспечения, и тем временем сопровождающий перешел к пересмотру 1.57, он, вероятно, согласился бы с исправлениями только в версии 1.57.
Вы должны переустановить свою ветку до версии 1.57, исправить все конфликты, проверить и повторно отправить исправление.
Ответ 3
Как только вы объедините "тему" обратно в "мастер", у вас все равно будут конфликты. Таким образом, лучше время от времени переучивать "тему" на "мастер" (это проще, если вы делаете небольшие шаги, чем если вы делаете один большой шаг - по крайней мере, imo). Если вы перебалансируете, прежде чем слиться, все "опасные" вещи произойдут в ветке, и после этого слияние будет легко.
Ответ 4
См. git rebase: сохранение ваших веток в актуальном состоянии сообщение в блоге Джеймсом Боусом