2012-03-21 17 views
24

Hice algunas búsquedas en línea. Sé que puedes usar el parche de formato después de la confirmación, pero mi situación es un poco diferente.Cómo crear un parche sin compromiso en Git

Quiero crear un parche, similar a "dpk" en SVN, por lo que puedo enviarlo para la revisión del código, pero aún no quiero comprometerlo.

¿Cómo puedo lograr esto con Git?

+5

Un punto importante de un DVCS como git es que no hay ninguna razón para evitar cometer algo. –

+0

Nadie ha respondido la pregunta .. No se le ha preguntado nada acerca de los compromisos. Se le preguntó cómo se produce un parche que se puede distribuir a otros usuarios. – Stephen

+0

Relacionado: [git format-patch without commiting] (http://stackoverflow.com/q/7837218/183120) – legends2k

Respuesta

7

Comprometerse en Git es una operación barata y completamente local, por lo que no hay ninguna razón para evitar comprometerse mientras no lo empuje a ninguna parte.

Solo crea una nueva sucursal local y confirma tus cambios allí. Siempre puede eliminar la rama más tarde si ya no la quiere, o puede conservar la rama y usarla para trabajar en lo que sea que esté haciendo, luego fusionar (o volver a establecer la base) en la rama principal cuando esté lista. Este es un buen flujo de trabajo para usar cuando se trabaja con 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 
+8

No es útil. A veces quiero ver los cambios locales antes del compromiso para poder ver cosas que no intenté comprometer. – Stephen

+5

Puedes hacer un 'git diff' para eso. – bfontaine

+3

@Stephen 'git add --patch' – sigod

1

Un compromiso con un repositorio local en git no es "vinculante". Puede confirmar sus cambios, crear su parche y luego hacer un restablecimiento parcial en su sucursal a la confirmación anterior y es como si su compromiso nunca hubiera sucedido.

Dicho esto, realmente no hay ninguna razón para que TENGA que restablecer su bifurcación después de crear el parche. Puede dejar la confirmación en el repositorio y simplemente evitar presionar hasta que se complete la revisión del código. Si tiene que regresar y hacer cambios en la confirmación original, tiene opciones en ese punto.

Y si crea una bifurcación para la confirmación, como hammar sugiere, es aún más fácil volver atrás y hacer cambios más adelante sin tener que realizar ninguna operación de actualización molesta y tal en la rama principal antes de presionar.

6

Como @hammar Dicho esto, cometen es barato y entonces usted puede soplar el comprometerse con git reset etc.

También puede esconder y luego hacer:

git stash show -p 
79

Cuando otros chicos ya se habían dado algunos respuesta que cumpla con la convención git, la pregunta de la OP, "crear un parche sin comprometerse", también se puede resolver de esta manera:

git diff > my_patch.txt 

Más tarde se puede aplicar esta p atch, también sin una confirmación, por:

git apply my_patch.txt 

Pero si sólo están trabajando a nivel local, un git checkout another_branch -m es lo suficientemente bueno para que todos los cambios actuales uncommit a que another_branch, sin ni siquiera parche y aplicar.

+0

en caso de que quiera eliminar este parche aplicado: git apply -R my_patch.txt – Sourabh

+2

¡No incluimos archivos nuevos/no registrados! Si necesita incluir archivos nuevos, debe agregar todos los archivos al índice (git add) y luego a $ git diff --cached> my_patch.txt – dxvargas

+0

Esto tampoco incluye los archivos en etapas. Necesitarás ejecutar 'git diff -staged> my_patch.txt' para incluirlos –

7

paso en general para generar parche sin comprometer al fin

  1. confirmar los cambios locales utilizando

    git commit -a -m "specific message" 
    

    Nota: no pulse este cometido.

  2. generan parche

    git format-patch -s -n -1 HEAD 
    

    generará 0001-.Patch

  3. volver local de cometer

    git reset --soft HEAD~1 
    

    eliminar cometer pero mantener su trabajo

    git reset --hard HEAD~1 
    

    eliminar comprometen con su trabajo

Cuestiones relacionadas