Конфликт git merge после изменения git - "Ваша ветвь и" происхождение / мастер "разошлись"

Вот что происходит:

  1. После недавнего коммита с удаленным мастером я делаю небольшое тривиальное изменение в своем локальном репо
  2. я добавить git commit --amend и оставьте то же самое сообщение коммита как HEAD
  3. Я пытаюсь подтолкнуть репо к мастеру git push

И теперь я получаю

On branch master
Your branch and 'origin/master' have diverged,
and have 1 and 1 different commit each, respectively.
  (use "git pull" to merge the remote branch into yours)
nothing to commit, working directory clean

Я хочу понять:

  1. Почему это именно так и происходит?
  2. Что я могу сделать, чтобы предотвратить это?
  3. Как я могу согласовать мастер с местным после изменения мерзавца?

1 ответ

Решение

Вы изменили существующий принудительный коммит, создав собственную версию (поскольку ее содержимое изменилось)

 --x---Y (master: that is the X amended)
    \
     --X (origin/master)

Вот почему у вас есть 1 и 1 разный коммит между мастером и источником / мастером.

Что я могу сделать, чтобы предотвратить это?

Не "исправлять" существующий выдвинутый коммит (только локальный, еще не переданный)

Как я могу согласовать мастер с местным после изменения мерзавца?

Просто перебазируем поверх оригинала / мастера, затем нажимаем

git rebase origin/master

 --x--X---Y' (master)
      |
(origin/master)

git push

 --x--X---Y' (master, origin/master)

Если вы единственный, кто работает над проектом после внесения изменений, вы могли бы запустить

git push -f origin master

Если вы не единственный, кто работает над проектом, будьте осторожны с тем, что делаете, потому что это переписывает историю.

Вот отличная статья об изменении:
https://medium.com/@igor_marques/git-basics-adding-more-changes-to-your-last-commit-1629344cb9a8

Другие вопросы по тегам