theirs origin force git merge

origin - git merge--abort



Git merge-s suyos: ¿Simplemente? (3)

He revisado las diversas preguntas sobre esto. El primero proporciona una gran pregunta y respuesta (¿relevante? No estoy seguro) y el segundo proporciona una respuesta incorrecta como la mejor respuesta.

Tengo una rama llamada great-use-this . Tengo otra rama llamada master . Quiero fusionar great-use-this en Master y evitar los conflictos de fusión automática.

¿Cuál es la forma más sencilla y fácil de hacer esto?

Nota: De hecho, he descubierto esto (usando una tercera rama y la ours , pero sería bueno tenerlo en SO de todos modos).


Me git reset --hard BRANCHNAME opción git reset --hard BRANCHNAME , pero he descubierto que hay un "suyo" en Git (v. 1.7.1 al menos).

Si quieres probarlo, simplemente agrega un argumento "-Xtheirs" al comando de combinación.

Por ejemplo, comenzando en master:

git checkout -b editBranch
-- edit your files --
git add .
git commit -m "Updated the files"
git checkout master
git merge -Xtheirs editBranch

Si ha eliminado algún archivo en editBranch, obtendrá una configuración de fusión que se puede resolver con git rm FILENAME .

Una vez más, parece probable que el reinicio - hard BRANCHNAME sea una mejor opción, pero si tiene un caso en el que realmente necesite un suyo, esto debería llevarlo allí.


Sí, crear una tercera rama y hacer una merge -s ours es merge -s ours única solución.

Pero encontrará el "no fusionamos ninguna" estrategia de fusión de todos ellos "aquí" .

Entre la sustitución de su trabajo con otra rama de trabajo, o simplemente deshaciéndose del trabajo actual y reemplazándolo completamente por la otra, Junio ​​C. Hamano (el principal mantenedor de Git ) prefiere el segundo enfoque:

Creo que " -s theirs " es aún peor. Es la forma en que descartarías lo que hiciste (quizás porque la otra parte tiene una solución mucho mejor que tu hack), pero eso se puede hacer mucho más fácil y limpiamente con:

$ git reset --hard origin/master

Algunas personas podrían decir: "Pero con '' merge -s theirs '', también puedo conservar lo que hice". Ese reinicio es simplemente descartar lo que hice.

Esa lógica también es defectuosa. En su lugar puedes:

$ git branch i-was-stupid $ git reset --hard origin/master

Si realmente quieres mantener un registro de tu fracaso.

Un gran problema que tienen sus -s theirs "en comparación con el anterior" restablecer a origen, descartar o dejar de lado el historial fallido "es que su historial" maestro "en el que se basa su desarrollo posterior mantendrá su basura fallida en él para siempre si tu hiciste "-s suyos" .

Esperamos que con el tiempo se convierta en un mejor programador y que eventualmente tenga algo que valga la pena compartir con el mundo cerca de la punta de su rama maestra. Sin embargo, cuando eso suceda, no puedes ofrecer tu rama maestra para que sea arrastrada por el flujo ascendente, ya que el mundo en general no estará interesado en tus errores anteriores en absoluto.


Se encontró con este problema el otro día:

httpx: //seanius.net/blog/2011/02/git-merge-s-theirs/

Actualización : el url viejo está caído. Aquí está el artículo a través de la Máquina Wayback de Archive.org :

git merge -s ours ref-to-be-merged git diff --binary ref-to-be-merged | git apply -R --index git commit -F .git/COMMIT_EDITMSG --amend