Jak uzyskać „ich” zmiany w środku sprzecznej bazy Git?

349

Mam sprzeczne gałęzie, gałąź 2 rozgałęziona z gałęzi 1.

Powiedzmy, że bazując branch2na bieżącym branch1, przy rozwiązywaniu konfliktów, postanawiam wziąć niektóre (nie wszystkie) „ich” (tj. branch1) Pliki bez zmian . Jak mogę to zrobić?

Próbowałem:

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
źródło
41
Uwaga: jeśli bazujesz na gałęzi 2 na gałęzi 1, odtwarzanie odbywa się względem gałęzi 1, więc „ich” to tak naprawdę gałąź 2, a „nasza” to gałąź 1. git.661346.n2.nabble.com/…
Pan Fooz
2
Zobacz także github.com/git/git/commit/…
VonC
1
To tylko kosztowało mnie około 20 godzin sumiennej pracy. Szczerze mówiąc myślałem, że „nasz” zawsze będzie kopią roboczą.
Theodore R. Smith

Odpowiedzi:

496

Chcesz użyć:

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

Jeśli zmieniają bazę oddział feature_xprzeciw master(czyli działa git rebase masternatomiast na oddział feature_x), podczas podścielanie oursodnosi się masteri theirsdo feature_x.

Jak wskazano w dokumentach git-rebase :

Zauważ, że scalanie rebase działa poprzez odtworzenie każdego zatwierdzenia z działającej gałęzi na górze gałęzi. Z tego powodu, gdy dochodzi do konfliktu scalania, strona zgłaszana jako nasza to dotychczasowa seria bazowa, zaczynająca się od <upstream>, a ich jest działającą gałęzią. Innymi słowy, boki są zamieniane.

Aby uzyskać więcej informacji, przeczytaj ten wątek .

iGEL
źródło
0

Jeśli chcesz pobrać konkretny plik z innej gałęzi, po prostu zrób to

git checkout branch1 -- filenamefoo.txt

Spowoduje to pobranie wersji pliku z jednej gałęzi do bieżącego drzewa

Adrian Cornish
źródło
35
To będzie prawdopodobnie zły pomysł w środku rebase jak byłoby wyciągnąć plik z szefem tego oddziału nie w jednorodzinnym punktu głowy byłbyś w stanie w skonfliktowanego rebase
Clintm