в интерактивном окне, результат будет таким, как вы ожидали.

ал, что понял, как работает 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? Сила толчка имеет смысл для меня, но разве это не должно просто оставить пульт в том же состоянии, как если бы Брайан толкнул первым?

Как я думаю об этом неправильно?

Ответы на вопрос(4)

Ваш ответ на вопрос