Когда понадобится git-rebase? - PullRequest
17 голосов
/ 29 мая 2009

Каждый раз, когда я читаю документацию 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

Ответы [ 4 ]

8 голосов
/ 29 мая 2009

Вам необходимо использовать его, например, когда вы хотите отправить патч для кода, который кто-то изменил. Например, если вы выполнили переход с версии 1.56 программного обеспечения и тем временем сопровождающий перешел на версию 1.57, он / она, вероятно, будет принимать исправления только в версии 1.57.

Вы должны перебазировать свою ветку до версии 1.57, исправить все конфликты, проверить и повторно отправить патч.

8 голосов
/ 29 мая 2009

Во-первых, в git нет небезопасных операций. У rebase есть операция прерывания, и все операции попадают в reflog, так что вы можете отменить все что угодно. На самом деле все как раз наоборот.

Это позволяет вам свободно совершать коммиты в любое время, когда вам не нужно иметь "хорошую" сборку, пока вы на пути к ее созданию. Ревизии, которые вы публикуете , можно очистить, сложив все шаги, которые вы сделали на этом пути, в один коммит.

Я использую rebase все время (довольно часто с помощью pull, который я обычно настраиваю, чтобы перебазировать после фазы выборки). Не думайте об этом как о переписывании истории - думайте, что это инструмент для очистки вашего черновика перед публикацией.

Через год кому-нибудь в вашем проекте будет важно знать, что вы действительно запустили эту функцию против ревизии E, а не ревизии G?

Ненужные рекурсивные слияния скрывают более важные части истории.

4 голосов
/ 30 мая 2009

См. git rebase: поддержание актуальности ваших веток сообщение в блоге Джеймса Боуэса

4 голосов
/ 29 мая 2009

Как только вы объедините "топик" с "мастером", у вас все равно будут эти конфликты. Таким образом, лучше время от времени перебрасывать «топик» на «мастер» (легче, если вы делаете маленькие шаги, чем если вы делаете один большой шаг - по крайней мере, imo). Если вы сделаете ребазинг до слияния, все «рискованные» вещи произойдут в ветке, а потом слияние легко.

...