Коммиты Git дублируются в той же ветке после выполнения перебазирования

Я понимаю сценарий, представленный в 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, поэтому я хотел бы знать две вещи:

  1. Почему дублирует ли Git эти коммиты при ребазировании? Есть ли особая причина сделать это вместо того, чтобы просто применять C5 и C6 после C7 ?
  2. Как я могу этого избежать? Было бы разумно это сделать?

108
задан Amol 13 November 2019 в 08:13
поделиться