Я думаю, вы не понимаете, как использовать git rebase
. Вы говорите, что когда B хочет переместить свою работу на master
, этот разработчик делает:
git checkout master
git pull
git rebase dev
git checkout dev
Когда вы запускаете git rebase dev
на master
, это говорит (примерно) о том, чтобы взять все коммиты, которые находятся в master
, но не в dev
, и попытаться повторно применить любой из тех, которые вводят новые изменения на вершине master
. Вы, вероятно, хотите сделать следующее:
git checkout master
git pull
git checkout dev
git rebase master
... так что все новое в dev
будет применено поверх master
. Обратите внимание, что после этих команд можно ожидать, что dev
и master
будут одинаковыми, только если в dev
.
ничего нового не было.
В качестве более общего комментария, самый простой способ выяснить, что не так с вашей историей в подобных случаях, - это часто использовать инструмент, который показывает вам графическое представление графа коммитов. Например, если вы запустите gitk --all
, вы сможете увидеть, где находятся master
и dev
, и почему они не указывают на тот же коммит, который вы ожидаете.
Кроме того, стоит отметить, что во избежание путаницы, которая может возникнуть при переписывании опубликованной истории, B может не захотеть делать ребаз, когда ветка dev
содержит опубликованные коммиты, которые не были объединены с master
.