Я понимаю сценарий, представленный в Pro Git о Опасностях повторного базирования . Автор в основном рассказывает вам, как избежать дублирования коммитов:
Не перемещайте коммиты, которые вы отправили в публичный репозиторий.
Я расскажу вам свою конкретную ситуацию, потому что я думаю, что она не совсем подходит для сценария Pro Git, и у меня все равно получаются дублированные коммиты.
Допустим, у меня есть две удаленные ветки с их локальными аналогами:
origin/master origin/dev
| |
master dev
Все четыре ветки содержат одинаковые коммиты, и я собираюсь начать разработку в dev
:
origin/master : C1 C2 C3 C4
master : C1 C2 C3 C4
origin/dev : C1 C2 C3 C4
dev : C1 C2 C3 C4
После пары коммитов я внесите изменения в origin / dev
:
origin/master : C1 C2 C3 C4
master : C1 C2 C3 C4
origin/dev : C1 C2 C3 C4 C5 C6 # (2) git push
dev : C1 C2 C3 C4 C5 C6 # (1) git checkout dev, git commit
Мне нужно вернуться к master
, чтобы быстро исправить:
origin/master : C1 C2 C3 C4 C7 # (2) git push
master : C1 C2 C3 C4 C7 # (1) git checkout master, git commit
origin/dev : C1 C2 C3 C4 C5 C6
dev : C1 C2 C3 C4 C5 C6
И обратно к dev
I переустановить изменения, чтобы включить быстрое исправление в мою фактическую разработку:
origin/master : C1 C2 C3 C4 C7
master : C1 C2 C3 C4 C7
origin/dev : C1 C2 C3 C4 C5 C6
dev : C1 C2 C3 C4 C7 C5' C6' # git checkout dev, git rebase master
Если я покажу историю коммитов с помощью GitX / gitk, я замечаю, что origin / dev
теперь содержит две идентичные фиксации C5 '
и C6 '
, которые отличаются от Git.Теперь, если я внесу изменения в origin / dev
, это будет результат:
origin/master : C1 C2 C3 C4 C7
master : C1 C2 C3 C4 C7
origin/dev : C1 C2 C3 C4 C5 C6 C7 C5' C6' # git push
dev : C1 C2 C3 C4 C7 C5' C6'
Возможно, я не совсем понимаю объяснение в Pro Git, поэтому я хотел бы знать две вещи:
C5
и C6
после C7
?