Comment obtenir «leurs» changements au milieu de rebases Git conflictuels?

349

J'ai des branches en conflit, branch2 branched from branch1.

Disons qu'en rebasant branch2sur le courant branch1, tout en résolvant les conflits, je décide de prendre certains (pas tous) de "leurs" (ie branch1) fichiers tels quels. Comment je fais ça?

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
Ondra Žižka
la source
41
Remarque: si vous rebasez branch2 sur branch1, la relecture se produit par rapport à branch1, donc "leur" est en fait branch2 et "le nôtre" est branch1. git.661346.n2.nabble.com/…
M. Fooz
2
Voir aussi github.com/git/git/commit/…
VonC
1
Cela m'a coûté environ 20 heures de travail assidu. Honnêtement, je pensais que "la nôtre" serait toujours la copie de travail.
Theodore R. Smith,

Réponses:

496

Vous souhaitez utiliser:

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

Si vous rebasez une branche feature_xcontre master(c'est-à-dire en cours d'exécution git rebase mastersur une branche feature_x), lors du rebasage, faites oursréférence à masteret theirsà feature_x.

Comme indiqué dans les documents git-rebase :

Notez qu'une fusion de rebase fonctionne en relisant chaque commit à partir de la branche de travail en haut de la branche. Pour cette raison, lorsqu'un conflit de fusion se produit, le côté signalé comme le nôtre est la série rebasée jusqu'à présent, en commençant par <en amont>, et la leur est la branche de travail. En d'autres termes, les côtés sont échangés.

Pour plus de détails, lisez ce fil .

iGEL
la source
0

Si vous voulez extraire un fichier particulier d'une autre branche, faites

git checkout branch1 -- filenamefoo.txt

Cela va tirer une version du fichier d'une branche dans l'arborescence actuelle

Adrian Cornish
la source
35
Ce serait probablement une mauvaise idée au milieu d'un rebase car cela tirerait le fichier de la tête de cette branche et non au point de tête détaché où vous seriez dans un état de rebase conflictuel
Clintm