Fusionarse con una confirmación específica

374

Creé una nueva rama nombrada newbranchdesde la masterrama en git. Ahora he hecho un poco de trabajo y que fusionar newbrancha master; sin embargo, he realizado algunos cambios adicionales newbranchy quiero fusionarme newbranchhasta el cuarto compromiso del último paramaster .

Lo usé cherry-pickpero muestra el mensaje para usar las opciones correctas:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

¿Puedo usar git mergepara hacerlo?

git merge newbranch <commitid>
Dau
fuente

Respuestas:

594

Claro, estar en la masterrama todo lo que necesitas hacer es:

git merge <commit-id>

¿Dónde commit-idestá el hash de la última confirmación de la newbranchque desea obtener en sumaster rama.

Puede obtener más información sobre cualquier comando git haciendo git help <command>. Es ese caso es git help merge. Y los documentos dicen que el último argumento para el mergecomando es <commit>..., por lo que puede pasar referencias a cualquier confirmación o incluso múltiples confirmaciones. Sin embargo, nunca hice esto último yo mismo.

KL-7
fuente
30
no solo una confirmación, sino todas las confirmaciones anteriores acommit-id
Dau
53
Sí, va a fusionar todos los envíos a partir newbranchdesde el momento de su historia se separaron de masterhasta commit-iden masterrama. Puede pensar git merge <commit-id>en fusionar una rama sin nombre que termina con commit-idsu rama actual.
KL-7
2
¿Puedo fusionar entre dos ramas locales que no sean master, usando commit id?
skt
1
@skt, puedes, solo debes estar en la rama local en la que deseas unirte antes de usar git merge. es decir, decir que desea fusionar commit 18a6fac de la rama b2 en la rama b1, simplemente hagagit checkout b1; git merge 18a6fac
XioRcaL
1
Esto NO parece funcionar, si estoy en una rama en la que quiero fusionarme y hay otra rama con commits AB y C, y me fusiono en C solo obtiene los cambios realizados en C, no en A y B.
ggb667
12

Para mantener limpia la ramificación, puede hacer esto:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

De esta forma, newbranch terminará donde se fusionó con master, y continuará trabajando en newbranch2.

tkruse
fuente
1

Ejecute el siguiente comando en la carpeta de la rama actual para fusionarlo <commit-id>con la rama actual, --no-commitno realice una nueva confirmación automáticamente

git merge --no-commit <commit-id>

git merge --continue solo se puede ejecutar después de que la fusión haya generado conflictos.

git merge --abort Anule el proceso actual de resolución de conflictos e intente reconstruir el estado previo a la fusión.

ElasticCode
fuente