2630 votos

Cometer sólo una parte de un archivo en Git

Cuando hago los cambios a un archivo en Git, ¿cómo puedo cometer sólo algunos de los cambios?

Por ejemplo, ¿cómo podría yo cometer sólo 15 líneas de 30 líneas cambiado en un archivo?

3497voto

cloudhead Puntos 10279

Usted puede hacer git add -p filename.x, y se va a pedir a usted lo que usted quiera etapa. Usted podrá:

  • hit s para dividir cualquier cambio en pequeños trozos. Esto sólo funciona si hay al menos una invariable línea en el "medio" de la hunk, que es donde el galán se dividirá
  • a continuación, pulse:
    • y a la etapa que hunk, o
    • n a no etapa que hunk, o
    • e para editar manualmente la hunk (útil cuando git no se puede dividir automáticamente)
  • y d para salir o ir al archivo siguiente.
  • Uso ? para obtener la lista completa de las opciones disponibles.

Si el archivo no está en el repositorio sin embargo, hacer primero git add -N filename.x. Después se puede ir con git add -p filename.x.

243voto

Jakub Narębski Puntos 87537

Usted puede utilizar git add --interactive o git add -p <, y, a continuación, file (no >); ver el modo Interactivo en git-add manual, o, simplemente, seguir instrucciones.

Si prefieres hacerlo desde la interfaz gráfica de usuario, puede utilizar git-gui. Simplemente puede marcar fragmentos que desea incluir en cometer. Yo personalmente creo que es más fácil que usar git commit. Otros git Gui, como QGit o GitX, también podría tener esta funcionalidad.

138voto

Ionuț G. Stan Puntos 62482

git gui proporciona esta funcionalidad en la vista de diff. Sólo derecho haga clic en la línea(s) que usted está interesado y usted debería ver una "etapa de esta línea de cometer" elemento de menú.

42voto

François Puntos 2445

Si usted está usando vim, puede que desee probar la excelente plugin llamado fugitivo.

Usted puede ver la diferencia de un archivo de una copia de trabajo y el índice con :Gdiff, y, a continuación, agregue las líneas o bloques para el índice clásico que usa vim diff comandos como dp. Guardar los cambios en el índice y se comprometan con :Gcommit, y listo.

Muy buena introductorio screencasts aquí (ver esp. la parte 2).

22voto

jdsumsion Puntos 1446

Cuando tengo un montón de cambios, y acabarán creando un par de confirmaciones de los cambios, entonces quiero salvar mi punto de partida temporalmente antes de realizar las cosas.

Como esto:

$ git stash -u
Saved working directory and index state WIP on master: 47a1413 ...
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 1st commit"
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 2nd commit"
$ git stash pop

Whymarrh la respuesta es lo que suele hacer, excepto, a veces, hay un montón de cambios, y te puedo decir que yo podría hacer un error al ensayo cosas, y quiero un estado comprometido puedo caer de nuevo en un segundo paso.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X