335 votes

Comment obtenir "leur" changements dans le milieu de conflit Git rebase?

J'ai contradictoires branches, (sesc) 2 branches à partir de branch1.

Disons que lorsque la relocalisation branch2 sur le courant branch1, tandis que la résolution des conflits, je décide de prendre certains (pas tous) de "leur" (c - branch1) des fichiers. Comment dois-je faire?

J'ai essayé:

git checkout branch1:foo/bar.java
fatal: reference is not a tree: TS-modules-tmp:foo/bar.java

git checkout refs/heads/branch1:foo/bar.java
fatal: reference is not a tree: refs/heads/TS-modules-tmp:foo/bar.java

480voto

iGEL Points 2091

Comme M. Fooz a dit, vous voudrez probablement utiliser

git checkout --ours foo/bar.java
git add foo/bar.java

Si vous rebase une branche feature_x sur le master, lors de la relocalisation ours se réfère à la maîtrise et à l' theirs de feature_x. Voir http://git.661346.n2.nabble.com/Counter-intuitive-results-for-git-show-and-git-checkout-during-rebase-with-conflict-td2370354.html

150voto

Nathan Fox Points 2054

Je pense que vous êtes à la recherche pour

git checkout --theirs foo/bar.java
git add foo/bar.java

Vous pouvez alors git rebase --continue après que vous avez résolu tous les conflits.

Edit 7/16/2013: je crois que ma réponse est correcte pour la question posée. La question posée est de savoir comment choisir branch1 de la version lors de l'année de référence (sesc) 2 sur branch1. Lors de l'année de référence (sesc) 2 sur branch1, branch1 de commits sont déroulés jusqu'au nœud parent et (sesc) 2 s engage sont poussées sur branch1, puis branch1 de commits sont ajoutés au-dessus de (sesc) 2 est validée. Dans le cas d'un conflit, (sesc) 2 s engage sont les nôtres et de branch1 s'engage à devenir le leur. Je réalise que c'est un peu déroutant, mais je l'ai juste essayé dans un dépôt de test et ça fonctionne comme je le décris.

C'est possible, si la question demande, "je décide de prendre certains (pas tous) de "leur" (c'est à dire branch1)", il est certainement possible que la cartographie de "leur" pour "branch1" a été involontaire, mais vraiment bon.

Edit 7/30/2014: je suis l'espoir de résoudre une partie de la confusion avec ma réponse. La base de la question de la résolution d'un conflit de fusion qui se produit seulement pendant un rebase si les deux branches ont un parent qui est antérieure à la cible de la direction générale de la tête. Ainsi, dans le cas de git checkout branch1, puis git rebase (sesc) 2 la suite se passe. Si branch1 la tête de la mère de branch2s les nouveaux commits, puis par défaut (sesc) 2 s engage sera rapidement transmis sur branch1, et il peut y avoir aucun conflit. Mais si le parent de branch1 et (sesc) 2 est avant branch1 de la tête, puis l'engage passé le parent de branch1 sera déroulé de branch1, (sesc) 2 s engage sera rapidement transmis sur branch1, le branch1 de validations seront appliquées après (sesc) 2 s s'engage au cours de laquelle il pourrait y avoir un conflit. Dans ce cas, les commits qui ont été appliquées à partir de (sesc) 2 sont les nôtres et les commits de branch1 devenir la leur. Si vous essayez ceci dans git, vous trouverez que cela soit le cas.

0voto

Adrian Cornish Points 8651

Si vous voulez tirer un fichier particulier à partir d'une autre branche juste le faire

git checkout branch1 -- filenamefoo.txt

Cela tirera une version d'un fichier à partir d'une branche dans l'arborescence actuelle

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X