Git pull --rebase генерирует два коммита вперед - PullRequest
0 голосов
/ 11 июня 2018

Сценарий:

  1. Я работал в локальной ветке mainline и сделал коммит CommitA в этой ветке и выдвинул изменения в origin/mainline.
  2. В то же время у меня была другая локальная ветвь dev, и я сделал коммит CommitB, прежде чем передать изменения из CommitA в удаленную ветвь.
  3. Итак, 1 произошло, всеизменения были в удаленной ветви (из локальной mainline), и я хотел перенести изменения в ту же самую origin/mainline из локальной dev ветви.

Что я сделал:

На ветке dev я набрал git pull --rebase origin mainline, чтобы сначала внести изменения оттуда. Это вызвало некоторые конфликты, я решил их, затем набрал git rebase --continue. Item5 сгенерировали два коммита CommitA сначала, затем CommitB секунду.Это дает мне Your branch is ahead by 2 commits.

Вопрос:

  1. В пункте 6 выше у меня было два коммита, один с тем же именем CommitA как в пункте 2. (но они имеют разные хэши).Безопасно ли git push origin/mainline обе фиксации, сгенерированные в пункте 6 ??
  2. Правильно ли я поступил?

1 Ответ

0 голосов
/ 11 июня 2018

Вы находитесь на dev, для которого на пульте есть origin/dev.А ваш локальный филиал dev опережает удаленного разработчика на два коммита.Сделайте >git branch -vv Он опишет ваши местные филиалы и их пульты.Если вы хотите перейти с локальной ветки разработчика на origin/mainline, вы можете это сделать.Это должно подтолкнуть commitB к origin/mainline.

Я полагаю, вы знаете о --set-upstream Разница в истории из-за перебазирования.Я думаю, что документация должна помочь: https://git -scm.com / book / en / v2 / Git-Branching-Rebasing Я цитирую текст ниже.Публикуем его здесь ради справки о готовности.

Теперь снимок, на который указывает C4 ', точно такой же, как тот, на который указывал C5 в примере слияния.В конечном продукте интеграции нет никакой разницы, но перебазирование делает историю чище.Если вы изучите журнал перебазированной ветки, она будет выглядеть как линейная история: кажется, что вся работа выполнялась последовательно, даже когда она первоначально была параллельной.

Часто вы делаете это, чтобы сделатьубедитесь, что ваши коммиты применяются в удаленной ветке - возможно, в проекте, в который вы пытаетесь внести свой вклад, но который вы не поддерживаете.В этом случае вы выполняете свою работу в ветке, а затем переводите свою работу в origin / master, когда будете готовы отправить свои исправления в основной проект.Таким образом, сопровождающему не нужно выполнять какую-либо интеграционную работу - просто быстрая перемотка вперед или чистое применение.

Обратите внимание, что моментальный снимок, на который указывает финальный коммит, с которым вы в итоге работаете, является ли он последнимиз перебазированных коммитов для перебазирования или окончательного коммита слияния после слияния, это тот же моментальный снимок - отличается только история.Перебазирование воспроизводит изменения из одной строки работы в другую в том порядке, в котором они были введены, тогда как объединение берет конечные точки и объединяет их вместе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...