Я знаю, что есть некоторые сценарии, которые приводят к дублированию коммитов Git, например, git cherry-pick
. Если коммит выбран и «объединен» с другой веткой, он появляется дважды в графе коммитов с двумя хэшами коммитов.
Возможно ли, что Git дублирует коммит во время операции git merge
?
Причина, по которой я спрашиваю, заключается в следующем графике коммитов (сгенерированном в TortoiseGit):
Коммиты перечислены здесь в порядке даты (дата автора).
После того, как я совершил efb916..
в зеленой ветке (которая тогда была моей master
веткой), я объединил зеленую ветку с красной веткой (которая является локальной боковой веткой). Это выглядит как обычное слияние на графике. Все идет нормально.
После этого я нажал кнопку «Синхронизировать» в Github для Windows, чтобы синхронизировать мой локальный master
с удаленным origin/master
. Это вытащило фиксацию 09067c..
из удаленной ветки, а затем объединило или перебазировало локальную master
, поэтому за фиксацией 09067c..
последовала фиксация efb916..
. Однако вместо настоящего слияния efb916..
с 09067c..
Git продублировал коммит efb916..
и присвоил ему новый хэш 48e314..
.
В конце концов, моя master
указывала на 48e314..
(черная ветвь на графике), а моя локальная боковая ветвь указывала на 68b78a..
(красная ветвь). Содержание, дата, автор и сообщение коммитов efb916..
и 48e314..
точно такие же.
Это случалось несколько раз, иногда с дублированием только одного коммита, иногда с несколькими коммитами.
Почему git продублировал фиксацию efb916..
? Как я могу предотвратить это?
EDIT: В качестве дополнительного примечания: мне кажется странным, что мой master
изначально указывал на efb916..
, но после Github Sync efb916..
больше не было в истории коммитов master
.