J'ai fait quelques recherches en ligne. Je sais que vous pouvez utiliser format-patch après commit, mais ma situation est un peu différente.
Je veux créer un patch, similaire à "dpk" dans SVN, donc je peux l'envoyer pour révision de code, mais je ne veux pas encore le valider.
Comment puis-je y parvenir avec Git?
S'engager dans Git est une opération bon marché et entièrement locale, il n'y a donc aucune raison d'éviter de s'engager tant que vous ne le poussez nulle part.
Créez simplement une nouvelle branche locale et validez vos modifications. Vous pouvez toujours supprimer la branche plus tard si vous ne le souhaitez plus, ou vous pouvez conserver la branche et l'utiliser pour travailler sur tout ce que vous faites, puis la fusionner (ou la rebaser) dans la branche principale lorsqu'elle est prête. C'est un bon workflow à utiliser lorsque vous travaillez avec Git.
$ git checkout -b feature-foo # create and switch to new branch feature-foo
$ git commit
# do whatever you need to do
$ git checkout master # switch back to the master branch
$ git merge feature-foo # merge your change into master (optional)
$ git branch -d feature-foo # delete the branch
Lorsque d'autres gars ont déjà donné une réponse conforme à la convention git, la question de l'OP, "créer un patch sans commit", peut également être résolue de cette manière:
git diff > my_patch.txt
Plus tard, vous pouvez appliquer ce correctif, également sans commit, en:
git apply my_patch.txt
Mais si vous travaillez uniquement localement, un git checkout another_branch -m
est assez bon pour apporter toutes vos modifications non validées actuelles à cet autre_branch, sans même patcher et appliquer.
étape générale pour générer enfin un patch sans commit
validez vos modifications locales en utilisant
git commit -a -m "specific message"
Remarque: ne poussez pas ce commit.
générer un patch
git format-patch -s -n -1 HEAD
il générera 0001-.patch
annuler la validation locale
git reset --soft HEAD~1
supprimer commit mais garder votre travail
git reset --hard HEAD~1
supprimer commit avec votre travail
Comme l'a dit @hammar, la validation est bon marché et vous pouvez ensuite supprimer la validation avec git reset
etc.
Vous pouvez également ranger puis faire:
git stash show -p
Un commit sur un dépôt local dans git n'est pas "contraignant". Vous pouvez valider vos modifications, créer votre correctif, puis effectuer une réinitialisation logicielle de votre branche sur le commit précédent et c'est comme si votre commit n'était jamais arrivé.
Cela étant dit, il n'y a vraiment aucune raison de réinitialiser votre branche après avoir créé le patch. Vous pouvez laisser le commit dans le dépôt et éviter de le pousser jusqu'à ce que la révision du code soit terminée. Si vous devez revenir en arrière et apporter des modifications au commit d'origine, vous avez des options à ce stade.
Et si vous créez une branche pour la validation comme Hammar le suggère, il est encore plus facile de revenir en arrière et d'apporter des modifications plus tard sans avoir à effectuer de rebasage ennuyeux et autres dans la branche principale avant de pousser.