¿Es posible hacer un git merge, pero sin un compromiso?
"man git merge" dice esto:
With --no-commit perform the merge but pretend the merge failed and do not autocommit,
to give the user a chance to inspect and further tweak the merge result before
committing.
Pero cuando trato de usar git mergecon los --no-commitque todavía auto-commit. Esto es lo que hice:
$> ~/git/testrepo$ git checkout master
Switched to branch 'master'
$> ~/git/testrepo$ git branch
* master
v1.0
$> ~/git/testrepo$ git merge --no-commit v1.0
Updating c0c9fd2..18fa02c
Fast-forward
file1 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
$> ~/git/testrepo$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
Un posterior git logrevela todos los commits de la rama v1.0 fusionados en master.

--no-commitcambio es efectivo solo si no ocurre un conflicto, en caso de conflicto, git nunca se auto-confirmará.rm .git/MERGE_HEADdespués, lo que obligará a git a olvidar que se produjo la fusión.Automatic merge went well; stopped before committing as requestedgit merge BRANCHENAME --no-commit --no-ffdejé mi espacio de trabajo en un estado git "FUSIÓN". No del todo seguro de lo que hace exactamente, pero un simplegit stash saveygit stash popciclo pareció volver todo a la normalidad; con solo los archivos modificados de la rama de destino en su lugar según lo previsto, y ya no tiene un estado MERGING.Estás malentendido el significado de la fusión aquí.
Esto
--no-commitevita que ocurra el COMPROMISO DE FUSIÓN, y eso solo sucede cuando fusiona dos historias de rama divergentes; en su ejemplo, ese no es el caso, ya que Git indica que fue una fusión de "avance rápido" y luego Git solo aplica las confirmaciones ya presentes en la rama de forma secuencial.fuente
git help merge=> "Con--no-commitrealizar la fusión pero pretender que la fusión falló y no autocomprometirse, para darle al usuario la oportunidad de inspeccionar y ajustar aún más el resultado de la fusión antes de comprometerse. " La clave, por supuesto, es usarlo junto con--no-ffSi solo desea confirmar todos los cambios en una confirmación como si hubiera escrito usted mismo, --squash también lo hará
fuente
git merge v1.0 --no-commit --no-ffPrefiero de esta manera, así que no necesito recordar ningún parámetro raro.
Luego dirá que su rama está "
#" adelante con los commits, ahora puede quitar estos commits y ponerlos en los cambios de trabajo con lo siguiente:Por ejemplo, si después de la fusión es 1 commit adelante, use:
Nota: en Windows, se necesitan comillas. (Como Josh señaló en los comentarios) por ejemplo:
fuente
git reset "@~1"Cuando hay una confirmación solo en la rama, generalmente hago
fuente