¿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 merge
con los --no-commit
que 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 log
revela todos los commits de la rama v1.0 fusionados en master.
--no-commit
cambio es efectivo solo si no ocurre un conflicto, en caso de conflicto, git nunca se auto-confirmará.rm .git/MERGE_HEAD
después, lo que obligará a git a olvidar que se produjo la fusión.Automatic merge went well; stopped before committing as requested
git merge BRANCHENAME --no-commit --no-ff
dejé mi espacio de trabajo en un estado git "FUSIÓN". No del todo seguro de lo que hace exactamente, pero un simplegit stash save
ygit stash pop
ciclo 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-commit
evita 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-commit
realizar 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-ff
Si 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-ff
Prefiero 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