мерзавец заявляет, что ветка не объединена после перебазирования - почему? - PullRequest
15 голосов
/ 24 марта 2011

Я использую git-svn для управления своими ветками исправлений ошибок, но он говорит мне, что у меня есть внесенные изменения, хотя даже если я просматриваю репозиторий 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.

Ответы [ 2 ]

27 голосов
/ 24 марта 2011

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

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

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

3 голосов
/ 24 марта 2011

Вот как я это делаю, и это работает. Ответ пользователя 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
...