2011-11-16 9 views
238

Ho rami in conflitto, branch2 ramificato da branch1.Come ottenere le "loro" modifiche nel mezzo di un conflitto Git rebase?

Diciamo quando rebasing branch2 sulle attuali branch1, mentre la risoluzione dei conflitti, decido di prendere un po 'di (non tutti) dei file "loro" (vale a dire branch1) così come sono. Come faccio?

ho provato:

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 
+29

Nota: se si sta riposizionando branch2 su branch1, la riproduzione avviene in relazione a branch1, quindi "theirs" è in realtà branch2 e "ours" è branch1. http://git.661346.n2.nabble.com/Counter-intuitive-results-for-git-show-and-git-checkout-during-rebase-with-conflict-td2370354.html –

+2

Vedi anche https: // github.com/git/git/commit/f30301657b68561392d910f6196380dd3976549e – VonC

risposta

317

Si desidera utilizzare:

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

Se si esegue il rebase di una caratteristica feature_x sul master, durante il rebasing ours fa riferimento al master e theirs a feature_x.

Come indicate nel git-rebase docs:

noti che un rebase unione opere riproducendo ogni commit dal ramo di lavoro sulla parte superiore del ramo. Per questo motivo, quando si verifica un conflitto di unione, la parte riportata come nostra è la serie aggiornata rebased, a partire da < a monte >, e il loro è il ramo operativo . In altre parole, i lati vengono scambiati.

Per ulteriori dettagli read this thread.

2

Se si vuole tirare un particolare file da un altro ramo solo fare

git checkout branch1 -- filenamefoo.txt 

Questo tirerà una versione del file da un ramo nell'albero corrente

+20

Questa sarebbe probabilmente una cattiva idea nel mezzo di un rebase in quanto tirerebbe il file dalla testa di quel ramo non al punto di testa staccato in cui ci si troverebbe in un conflitto stato rebase – Clintm