Кто-то пометил это как дубликаты, но он не говорит, почему git rebase
не вызывает конфликтов, в то время как git pull
имеет
У меня есть два клона одного и того же репо, C1
и C2
, и оба их заголовка находятся на коммите M1
, который имеет некоторые изменения в файле F
.
Предположим, что нет .gitconfig
файла и .git/config
для файла является значением по умолчанию, сгенерированным git
В C1
- Я изменяю
F
(там же, где M1
изменен F
)
git commit -a --amend --no-edit
для перезаписи M1
, что приводит к новой фиксации M2
.
git push -f
для перезаписи пульта.
В C2
- Я делаю
git fetch
. Так что origin/master == M2
в то время как HEAD == M1
, поскольку M1
и M2
обе изменены F
, любая из следующих команд перейдет в состояние merge conflict
:
git merge origin/master
git merge
git rebase origin/master
git pull
Однако следующие команды не запускают merge conflicts
и устанавливают HEAD
в M2
git rebase
git pull --rebase
Вопросы
- Правильно ли это поведение по замыслу?
- В чем разница между
git rebase
и git rebase origin/master
- Что делает
git pull --rebase
?
Раньше я всегда думал
git pull
совпадает с git fetch && git merge origin/master
git pull --rebase
совпадает с git fetch && git rebase origin/master
Но этот эксперимент опровергает мою мысль.
Ситуация не изменится, даже если я добавлю еще один M3
поверх M2
и нажму C1
. В C2
он все равно сбрасывается на M3
и M1
теряется.