В основном это рассматривается в «Восстановление после восходящего повтора» , но это немного запутано для моих вкусов.
Вы должны знать, что git pull origin master
точно равно git fetch master; git merge origin/master
,Другими словами, вы попросили git объединить B и C вместе.Есть причина, по которой нецелесообразно перебазировать изменения, которые уже были опубликованы: потому что довольно легко воскресить старые коммиты.
Так как это был простой сквош, git pull --rebase
сможет понять этоиз.Вернитесь туда, где вы были до ошибочного слияния, и скажите git pull --rebase origin master
(или git rebase origin/master
, поскольку вы уже получили).Это волшебным образом перенесет A, B и любые последующие коммиты на C, и он заметит, что A + B = C.
Вы можете сделать это по умолчанию, так как это позволит вам избежать подобных беспорядков -установить для конфигурации branch.<name>.rebase
значение true.