¿Cómo obtener "sus" cambios en medio de un conflicto de Git rebase?

349

Tengo ramas en conflicto, branch2 ramificado de branch1.

Digamos que cuando se vuelve branch2a emitir en corriente branch1, al resolver conflictos, decido tomar algunos (no todos) de "sus" (es decir branch1) archivos tal cual. ¿Cómo puedo hacer eso?

Lo intenté:

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
fuente
41
Nota: si está volviendo a dividir branch2 en branch1, la reproducción ocurre en relación con branch1, por lo que "suyo" es en realidad branch2 y "nuestro" es branch1. git.661346.n2.nabble.com/…
Mr Fooz
2
Ver también github.com/git/git/commit/…
VonC
1
Esto me costó unas 20 horas de trabajo diligente. Honestamente pensé que "nuestro" siempre sería la copia de trabajo.
Theodore R. Smith

Respuestas:

496

Quieres usar:

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

Si rebase una rama feature_xcontra master(es decir, se ejecuta git rebase mastermientras está en la rama feature_x), durante la reestructuración se ourshace referencia a mastery theirshacia feature_x.

Como se señala en los documentos de git-rebase :

Tenga en cuenta que una combinación de rebase funciona al reproducir cada confirmación de la rama de trabajo en la parte superior de la rama. Debido a esto, cuando ocurre un conflicto de fusión, la parte informada como la nuestra es la serie rebaseada hasta ahora, que comienza con <upstream>, y la suya es la rama de trabajo. En otras palabras, los lados se intercambian.

Para más detalles lea este hilo .

iGEL
fuente
0

Si desea extraer un archivo en particular de otra rama simplemente haga

git checkout branch1 -- filenamefoo.txt

Esto extraerá una versión del archivo de una rama al árbol actual

Adrian Cornish
fuente
35
Esto probablemente sería una mala idea en medio de un rebase ya que se retiraría el archivo de la cabeza de esa rama no en el punto cabeza separada que estaría en un estado de rebase en conflicto
Clintm