Obtener una list de files para ser cometidos por el command particular de commit git

Entrada : git repo directory y commit command: como git commit -m "commit staged" o git commit -a -m "comit all file" o cualquier otro git commit ...

Salida : list de files que se agregarán en la confirmación por este command.

Solución posible:

  • get files escalonados por: git diff --cached --name-status

  • comtesting si el command git commit contiene --all bandera

  • if --all : get non stages files by git diff --name-only y toma esta list + list de cambios por etapas

  • si no, todos: get solo la list de cambios por etapas

¿Este algorithm cubre todos los casos de command de confirmación de git y estado de repository?

Puede get el estado completo del directory de trabajo y el área de ensayo de una vez con el git status --porcelain .

 $ git status --porcelain A that MM this ?? blah 

La primera columna es el estado del área de ensayo, la segunda es el estado del directory de trabajo. Lo anterior dice that se ha agregado al área de preparación, this tiene modificaciones tanto escalonadas como no registradas, y blah se rastrea.

Esto es lo mismo a largo ploop.

 $ git status On branch feature Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: that modified: this Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: this Untracked files: (use "git add <file>..." to include in what will be committed) blah 

Pero sospecho que lo que realmente quieres es poder revisar lo que va a cambiar antes de comprometerte. En este caso, sugeriría que no hagas esto. En lugar…

  1. No use -m .
  2. Use -v .
  3. Repara cualquier error con el git commit --amend .

git commit -m es un mal hábito para entrar. Significa que sus posts de compromiso serán una sola línea y carecerán de detalles. Un buen post de compromiso es algo así como:

Breve resumen.

Detalles, detalles, detalles.

git commit -m desalienta, y esos detalles serán importantes en el futuro, y nunca podrá recuperarlos . Vale la pena los pocos segundos extra.

Lo que es más importante, un git commit regular que tira de un editor ya te muestra lo que se va a cometer.

 # Please enter the commit message for your changes. Lines starting # with '#' will be ignonetworking, and an empty message aborts the commit. # On branch feature # Changes to be committed: # new file: that # modified: this # # Changes not staged for commit: # modified: this # # Untracked files: # blah # 

Aún mejor, si usa git commit -v , obtendrá la diferencia completa para revisar. Lo uso tan a menudo que lo alias como git ci (Check In).

 # Please enter the commit message for your changes. Lines starting # with '#' will be ignonetworking, and an empty message aborts the commit. # On branch feature # Changes to be committed: # new file: that # modified: this # # Changes not staged for commit: # modified: this # # Untracked files: # blah # # ------------------------ >8 ------------------------ # Do not touch the line above. # Everything below will be removed. diff --git a/that b/that new file mode 100644 index 0000000..e69de29 diff --git a/this b/this index 73e4f83..f129e32 100644 --- a/this +++ b/this @@ -4,3 +4,5 @@ fix 1 2 3 +4 + 

Finalmente, a diferencia de otros sistemas de control de versiones, las confirmaciones en Git no se comparten inmediatamente. Todo es local hasta que lo git push . Eso significa que si comete un error en una confirmación, puede solucionarlo rápidamente. Simplemente haga la corrección y el git commit --amend y la última confirmación se actualizará.

Entonces, en lugar de agregar un montón de capas para evitar cometer un error, solo arregle el truco. ¡Esa es la belleza del control de versiones!

Si está utilizando git commit -v como se sugiere arriba para revisar la list de files modificados, tenga en count que la línea antes de esa list cambiará con Git 2.14.x / 2.15 (Q4 2017).

La explicación de la línea de corte en el editor de logging de compromiso se ha modificado ligeramente.

Ver commit 8c4b1a3 (13 Sep 2017) por Kaartic Sivaraam ( sivaraam ) .
Ayudado por: Jeff King ( peff ) .
(Fusionada por Junio ​​C Hamano – gitster – in commit 77f4539 , 25 sep 2017)

commit-template : cambiar un post para ser más intuitivo

No es bueno usar la frase " do not touch " para transmitir la información de que la línea de corte no debe ser modificada o eliminada, ya que podría ser malinterpretada por una persona que no sabe que la palabra "tocar" tiene el significado de 'manipular'.
Además, podría hacer que las traducciones sean un poco difíciles, ya que podría no tener el significado previsto en algunos idiomas cuando se traduce como tal.

Entonces, usa términos más intuitivos en la oración.

Entonces, en lugar de

 Do not touch the line above. Everything below will be removed. 

Usted tendrá:

 Do not modify or remove the line above. Everything below it will be ignonetworking.