Git заявляет, что ветвь не сливается после перезагрузки - почему?

Я использую git -svn для управления ветвями bugfix, но он говорит мне, что у меня есть несвязанные изменения, хотя, если я просмотрю SVN-репо напрямую, я вижу, что они тоже были совершены. Это похоже на перезагрузку исправления ошибок, не устанавливая ветвь как объединенную.

Что я делаю неправильно, здесь?

git checkout -b fix_bug_1234

git add .
git commit -m "first change"
git add .
git commit -m "second change"

git rebase -i HEAD~2 // squash the two changes together

git svn rebase // fetch any changes from svn

git checkout master
git rebase fix_bug_1234
git svn dcommit

git branch -d fix_bug_1234
error: The branch 'fix_bug_1234' is not fully merged.

Ответы

Ответ 1

Причиной этого является то, что git rebase изменяет объекты фиксации. Таким образом, хотя фактический контент (или diff) совпадает с теми переустановленными коммитами, они относятся к другому родителю и, как таковые, различны.

Таким образом, git branch -d не может проверить, что изменения этих коммитов включены в некоторые другие коммиты. Для принудительного удаления необходимо использовать git branch -d (верхний регистр D).

На стороне примечание: git svn dcommit имеет тот же эффект, что и перезагрузка. Поскольку dcommit толкает коммиты на сервер SVN, он впоследствии получает коммиты с сервера SVN снова. Таким образом, вы оказываетесь в разных объектах, чем те, которые вы нажали. Хотя они могут быть идентичными по содержанию (если у вас не были конфликты), они по-прежнему различаются (основная причина в том, что git svn добавляет строку в сообщение фиксации, в котором указывается версия SVN, к которой принадлежит фиксация).

Ответ 2

Вот как я делаю такие вещи, и это работает. Ответ от пользователя poke объясняет, почему git rebase не делает то, что вы хотите.

git rebase -i HEAD~2 // squash the two changes together

git svn rebase // fetch any changes from svn
git svn dcommit  // you can commit to SVN from any branch

git checkout master
git svn rebase
git branch -d fix_bug_1234