Git: cometer y agregar automáticamente todos los files sin seguimiento

A menudo olvidé que tengo algunos files nuevos y hago directamente,

git commit -a -m "My commit message" 

Esto solo compromete los files modificados, y tengo que agregar los files restantes en una nueva confirmación. Esto significa que hay dos commits separados aunque lógicamente son parte de la misma tarea.

La manera más fácil que sé de include files sin seguimiento en la confirmación a través de dos commands consecutivos:

 git add -A git commit -a -m "My commit message" 

¿Es posible tener el mismo efecto que el anterior en un command?

Cree un file en su ruta de ejecución llamada (sin extensión): git-add-commit-untracked

Pon esto en esto:

 #!/bin/bash message=${0} git add -A git commit -am "$message" 

Entonces: git-add-commit-untracked "Commit message"

Sin embargo, puedes usar un nombre más corto para el file. Lo dejé largo para fines ilustrativos.

Aquí hay algunas opciones:

  • Use git commit --amend para que termine con solo una confirmación después de agregar los files sin seguimiento (pero no si ya ha enviado la confirmación anterior);
  • Use git commit --interactive ;
  • Cree un alias o secuencia de commands que agregue automáticamente nuevos files (ejemplos en otras respuestas). Aquí hay dos alias que utilizo para exactamente este propósito:

     [alias] untracked = ls-files --other --exclude-standard add-untracked = !git add $(git untracked) 
  • Aplaste sus dos confirmaciones utilizando git rebase -i , git reset <commit prior to first commit> y git commit , o git merge --squash en otra twig.

Sin embargo, no puede anular un command incorporado como, por ejemplo, commit con un alias, por lo que depende de usted recordar agregar los files que desea al índice antes de confirmar.

Lamentablemente, tampoco puedes especificar routes junto con git commit -a ; Acabo de probar git commit -a $(git untracked) y me dijo fatal: Paths with -a does not make sense. Entonces, para responder a su pregunta básica, creo que un script de git sería la única forma no interactiva.

Puede definir un alias para agregar todo antes de la confirmación. Simplemente ponga estas líneas en su file ~ / .gitconfig:

 [alias] ca = !sh -c 'git add -A && git commit -m \"$1\"' - 

Luego usa tu alias de esta manera:

 $ git ca 'Your commit message' 

No es posible usar la interfaz git pnetworkingeterminada. Sin embargo, git admite alias .

Usando un alias, es posible invocar un command git diferente, o incluso ejecutar scripts de shell arbitrarios. Cree una secuencia de commands que contenga los dos commands y aliéelo.

Consulte la wiki para get más información sobre alias y esta pregunta para este escenario específico.

Editar: tenga en count que esta no es una buena idea. Lo más probable es que termines agregando files innecesarios por error o teniendo un alias inútil debido a files no versionados en el tree.

Sí, tuve el mismo problema que tu en el pasado. Preferí usar el command git, pero tuve grandes problemas porque el guardia en Rails cambió muchos files sin alerta 🙂

Así que ahora, cada vez que cometo un código nuevo, trato de usar la interfaz de usuario para hacer esto (git gui) y tenga en count que nunca use git commit -a porque no está seguro de qué files se han modificado! Después de rebase el código nuevo, por favor, gitk para ver el tree de git, para que pueda conocer el compromiso gitk , committers, commit files y más.