web-dev-qa-db-fra.com

Comment créer un patch sans commit dans Git

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?

38
doglin

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
7
hammar

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.

110
RayLuo

étape générale pour générer enfin un patch sans commit

  1. validez vos modifications locales en utilisant

    git commit -a -m "specific message"
    

    Remarque: ne poussez pas ce commit.

  2. générer un patch

    git format-patch -s -n -1 HEAD   
    

    il générera 0001-.patch

  3. 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

8
Pintu Patel

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
6
manojlds

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.

1
mockobject