в интерактивном окне, результат будет таким, как вы ожидали.
ал, что понял, как работает git pull --rebase, но этот пример меня смущает. Я бы предположил, что следующие два сценария дадут одинаковые результаты, но они отличаются.
Во-первых, тот, который работает.
# Dan and Brian start out at the same spot:
dan$ git rev-parse HEAD
067ab5e29670208e654c7cb00abf3de40ddcc556
brian$ git rev-parse HEAD
067ab5e29670208e654c7cb00abf3de40ddcc556
# Separately, each makes a commit (different files, no conflict)
dan$ echo 'bagels' >> favorite_foods.txt
dan$ git commit -am "Add bagels to favorite_foods.txt"
brian$ echo 'root beer' >> favorite_beverages.txt
brian$ git commit -am "I love root beer"
# Brian pushes first, then Dan runs `git pull --rebase`
brian$ git push
dan$ git pull --rebase
dan$ git log
commit 9e1140410af8f2c06f0188f2da16335ff3a6d04c
Author: Daniel
Date: Wed Mar 1 09:31:41 2017 -0600
Add bagels to favorite_foods.txt
commit 2f25b9a25923bc608b7fba3b4e66de9e97738763
Author: Brian
Date: Wed Mar 1 09:47:09 2017 -0600
I love root beer
commit 067ab5e29670208e654c7cb00abf3de40ddcc556
Author: Brian
Date: Wed Mar 1 09:27:09 2017 -0600
Shared history
Так что это работает хорошо. В другом сценарии представьте, что Дэн толкнул, а затем Брайан (грубо) толкнул --force'd над своим коммитом. Теперь, когда Дэн бежитgit pull --rebase
Его коммит ушел.
# Dan and Brian start out at the same spot:
dan$ git rev-parse HEAD
067ab5e29670208e654c7cb00abf3de40ddcc556
brian$ git rev-parse HEAD
067ab5e29670208e654c7cb00abf3de40ddcc556
# Separately, each makes a commit (different files, no conflict)
dan$ echo 'bagels' >> favorite_foods.txt
dan$ git commit -am "Add bagels to favorite_foods.txt"
brian$ echo 'root beer' >> favorite_beverages.txt
brian$ git commit -am "I love root beer"
# THIS TIME, Dan pushes first, then Brian force pushes.
dan$ git push
brian$ git push --force
dan$ git pull --rebase
dan$ git log # Notice, Dan's commit is gone!
commit 2f25b9a25923bc608b7fba3b4e66de9e97738763
Author: Brian
Date: Wed Mar 1 09:47:09 2017 -0600
I love root beer
commit 067ab5e29670208e654c7cb00abf3de40ddcc556
Author: Brian
Date: Wed Mar 1 09:27:09 2017 -0600
Shared history
Исходная версия ветви имела то же состояние после Брайанаpush --force
как это было в первом сценарии, поэтому я ожидал того же поведения отgit pull --rebase
, Я запутался, почему Дэн коммит был потерян.
Я понимаю, что pull --rebase говорит: «бери мои локальные изменения и применяй их после удаленных». Я не ожидаю, что местные изменения будут выброшены. Кроме того, если бы Дэн бежалgit pull
(без--rebase
) его коммит не потерян.
Так почему же Дэн теряет свой локальный коммит, когда бежитgit pull --rebase
? Сила толчка имеет смысл для меня, но разве это не должно просто оставить пульт в том же состоянии, как если бы Брайан толкнул первым?
Как я думаю об этом неправильно?