Comment créer un patch sans commit dans Git

j'ai fait un peu de recherche en ligne. Je sais que vous pouvez utiliser format-patch après validation, mais ma situation est un peu différente.

je veux créer un patch, similaire à "dpk" dans SVN, donc je peux l'Envoyer pour la révision du code, mais je ne veux pas encore le propager.

Comment puis-je y arriver avec Git?

28
demandé sur kiamlaluno 2012-03-21 22:34:23

5 réponses

commettre en Git est une opération bon marché et entièrement locale, donc il n'y a aucune raison d'éviter de commettre aussi longtemps que vous ne le poussez nulle part.

il suffit de créer une nouvelle branche locale et d'y effectuer vos modifications. Vous pouvez toujours supprimer la branche plus tard si vous ne la voulez plus, ou vous pouvez garder la branche et l'utiliser pour travailler sur ce que vous faites, puis la fusionner (ou la rebaser) dans la branche principale quand elle est prête. C'est un bon flux de travail à utiliser lorsque vous travaillez avec des 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
5
répondu hammar 2012-03-21 18:45:27

alors que d'autres gars avaient déjà donné une réponse conforme à la convention git, la question de L'OP, "créer un patch sans commit", peut aussi être résolue de cette façon:

git diff > my_patch.txt

plus Tard, vous pouvez appliquer ce correctif, également sans commettre, par:

git apply my_patch.txt

mais si vous travaillez juste localement, a git checkout another_branch -m est assez bon pour apporter toutes vos modifications actuelles uncommit à cette another_branch, sans même patch et appliquer.

88
répondu RayLuo 2014-02-23 23:46:07

général l'étape de générer patch sans s'engager, au dernier

  1. valider vos modifications locales à l'aide de

    git commit -a -m "specific message"
    

    Note: Ne poussez pas ce commit.

  2. générer patch

    git format-patch -s -n -1 HEAD   
    

    il générera 0001 -.patch

  3. revenir de validation

    git reset --soft HEAD~1
    

    pour supprimer commettre, mais gardez votre travail

    git reset --hard HEAD~1
    

    pour supprimer commettre avec votre travail

6
répondu Pintu Patel 2016-02-27 13:55:34
git reset etc.

Vous pouvez aussi cacher et puis faire:

git stash show -p
5
répondu manojlds 2012-03-21 18:53:01

un engagement dans un repo local dans git n'est pas"contraignant". Vous pouvez propager vos modifications, créer votre patch et ensuite faire une réinitialisation douce de votre branche à la propagation précédente et c'est comme si votre propagation n'avait jamais eu lieu.

cela étant dit, il n'y a vraiment aucune raison que vous ayez à réinitialiser votre branche après avoir créé le patch. Vous pouvez laisser le commit dans le repo et éviter de le pousser jusqu'à ce que la révision du code soit terminée. Si vous devez revenir en arrière et faire des changements à la propagation initiale vous avez les options à ce point.

et si vous créez une branche pour le commit comme hammar le suggère, cela rend encore plus facile de revenir en arrière et de faire des changements plus tard sans avoir à faire de rebasage ennuyeux et tel dans la branche principale avant de pousser.

0
répondu mockobject 2012-03-21 18:49:14