2010-08-12 10 views
5

Donc, hier, j'ai posté un question concernant des conflits étranges quand j'ai essayé de rebaser une branche en amont dans ma branche de sujet local.Conflits avec `git rebase`

En fin de compte j'ai utilisé git rebase --merge upstream et résolu beaucoup de conflits dans les fichiers que je n'ai pas touchés depuis le rebas précédent. Dans ce cas, ma compréhension de rebase est de détacher mes validations de cette branche, d'appliquer les validations à partir de la branche amont, puis d'appliquer (en tant que correctifs) mes validations à celles-ci. Donc, cela finit par être une opération d'avance rapide. Ce que je ne comprends pas, c'est ... pourquoi aurais-je des conflits de fusion avec les commits qui viennent d'amont? Sont-ils appliqués en tant que correctifs aussi bien? Je pensais que c'est juste ... l'acte de "soudure" que certains commettent en plus du commit précédent qui venait de la même branche?

Je demande cela parce que j'avais beaucoup de conflits dans les fichiers que je n'ai pas touchés. Oh, et je fais des rebas quotidiens avec cette branche en amont.

MISE À JOUR

Je viens de remarquer que certains des commits apportés de l'amont à mon sujet branche ont leur carte d'identité SHA-1 a changé. Est-ce que quelqu'un sait ce qui pourrait amener Git à faire ça? Est-ce que ce pourrait être le commutateur --merge?

Ma version git est 1.5.6.5

+0

Avez-vous une sorte de conversion automatique comme dans http://stackoverflow.com/questions/1042207/git-svn-rebase-fails? – VonC

+0

@VonC 'core.autocrlf' est vide, ce que je suppose a la valeur par défaut de" entrée ". Pourrait-il être à cause de cela? Je ne suis pas sûr de savoir comment reproduire le problème maintenant, pour voir si le paramétrer sur false fait une différence. –

+0

ţ: assurez-vous de le définir sur false, juste pour être sûr. – VonC

Répondre

2

Rebase re-écrit l'histoire. Si vous rebassez des commits qui ont déjà été poussés vers une télécommande, vous entrez dans un monde blessé. Encore pire si vous continuez à rebaser comme ça. Rebase a ses avantages fois, mais il est spécialité outil IMO, pas un outil occasionnel, comme fusionner.

puis d'appliquer (en tant que patches) mes commits par-dessus ceux-ci.

Oui, comme nouveau engage

Ainsi, il finit par être une opération avance rapide

n ° A-avance rapide est tout simplement en déplaçant le pointeur HEAD de cette branche. Vous introduisez de nouveaux objets à distance et vous appliquez ensuite des correctifs.

Si votre local et étiez à distance dernière en synchronisation à A1, et dites que vous avez ajouté (localement) A2 et A3 commits, et a constaté que la télécommande a ajouté B1 et B2, rebasage se planquer A2 et A3, tirer vers le bas B1 et B2 (devrait être une avance rapide car ils partagent un descendant commun A1), et ensuite appliquer des correctifs pour A2 et A3que de nouveaux commits (d'où de nouveaux SHA-1) A2' et A3'. Alors maintenant votre historique local est: A1 - B1 - B2 - A2' - A3' ce qui n'est pas une avance rapide.

+1

Je connais les périls de rebase, et je n'utilise pas rebase comme ça. Pour quelque raison cependant, quand j'ai posté cette question j'ai eu des conflits bizarres sur des dossiers que je n'ai pas touchés. Rebase est connu pour produire moins de conflits que fusionner, mais il n'a pas fonctionné comme ça pour moi à l'époque. D'où ma question. Je n'ai pas trouvé la cause, ni la reproduire. –

Questions connexes