git affirme qu'une branche n'est pas fusionnée après le rebasement - pourquoi?

j'utilise git-svn pour gérer mes branches bugfix, mais cela me dit que j'ai des changements non fusionnés, même si si je passe en revue le rapport SVN directement, je peux voir qu'ils ont été engagés aussi. C'est comme si le rebase de la correction de bug ne définissait pas la branche fusionnée.

Qu'est-ce que je fais de mal, ici?

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.
15
demandé sur Thomas R 2011-03-24 01:44:24

2 réponses

La raison est que git rebase change les objets commit. Ainsi, alors que le contenu réel (ou diff) est le même avec les propagations rebasées, elles se réfèrent à un parent différent, et en tant que telles sont différentes.

git branch -d ne peut pas vérifier que les modifications de ces commits sont incluses dans d'autres commits. Vous devez utiliser git branch -D (en majuscules D) pour forcer la suppression, alors.

Sur une note de côté: git svn dcommit a le même effet que la relocalisation. Comme dcommit pousse les propagations vers le serveur SVN, il reçoit ensuite les propagations du serveur SVN à nouveau. Si vous vous retrouvez avec des objets différents de ceux que vous poussés. Bien que leur contenu puisse être identique (à moins que vous n'ayez eu des conflits), ils diffèrent encore (la raison principale est que git svn ajoute une ligne au message de propagation indiquant la version SVN à laquelle appartient la propagation).

27
répondu poke 2011-03-23 23:16:18

Voici comment je fais ce genre de chose, et ça marche. La réponse de l'utilisateur poke explique pourquoi le git rebase ne fait pas ce que vous voulez.

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
3
répondu Spike Gronim 2011-03-23 23:35:45