Est-il possible de faire un git merge
, mais sans commit?
"man git merge" dit ceci:
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.
Mais quand j'essaie de l'utiliser git merge
avec le, --no-commit
il se valide toujours automatiquement. Voici ce que j'ai fait:
$> ~/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 suivant git log
révèle tous les commits de la branche v1.0 fusionnés dans master.
--no-commit
commutateur n'est efficace que si aucun conflit ne se produit, en cas de conflit, git ne se validera jamais automatiquement.rm .git/MERGE_HEAD
ensuite, ce qui forcera git à oublier que la fusion s'est produite.Automatic merge went well; stopped before committing as requested
git merge BRANCHENAME --no-commit --no-ff
j'ai laissé mon espace de travail dans un état "fusion". Je ne sais pas exactement ce que cela fait exactement, mais un cycle simplegit stash save
etgit stash pop
semblait tout ramener à la normale; avec juste les fichiers modifiés de la branche cible en place comme prévu, et non plus un statut MERGING.Vous comprenez mal le sens de la fusion ici.
Le
--no-commit
empêche le MERGE COMMIT de se produire, et cela ne se produit que lorsque vous fusionnez deux historiques de branche divergents; dans votre exemple, ce n'est pas le cas, car Git indique qu'il s'agissait d'une fusion "d'avance rapide", puis Git applique uniquement les validations déjà présentes sur la branche de manière séquentielle.la source
git help merge
=> "Avec--no-commit
effectuer la fusion mais faire semblant que la fusion a échoué et ne pas s'engager automatiquement, pour donner à l'utilisateur une chance d'inspecter et de peaufiner le résultat de la fusion avant de valider. " La clé est bien sûr de l'utiliser en conjonction avec--no-ff
Si vous souhaitez uniquement valider toutes les modifications en un seul commit comme si vous vous étiez entré, --squash fera de même
la source
git merge v1.0 --no-commit --no-ff
Je préfère cette façon, donc je n'ai pas besoin de me souvenir de paramètres rares.
Il indiquera alors que votre branche est en avance par "
#
" les validations, vous pouvez maintenant supprimer ces validations et les mettre dans les modifications de travail avec les éléments suivants:Par exemple, si après la fusion, il y a 1 commit d'avance, utilisez:
Remarque: sous Windows, des devis sont nécessaires. (Comme Josh l'a noté dans les commentaires), par exemple:
la source
git reset "@~1"
Quand il n'y a qu'un seul commit dans la branche, je fais d'habitude
la source