Подтвердить что ты не робот

Когда понадобится 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

4b9b3361

Ответ 1

Во-первых, в git нет опасных операций. rebase имеет операцию прерывания, и все операции делают это в reflog, поэтому вы можете отменить все. На самом деле это совершенно противоположное.

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

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

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

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

Ответ 2

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

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

Ответ 3

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