Agregar solo files sin seguimiento

Uno de los commands que me resulta increíblemente útil en Git es git add -u para arrojar todo en el índice, excepto los files sin seguimiento. ¿Hay un inverso de eso? En los últimos meses, a menudo me he encontrado en una position en la que he agregado de forma interactiva algunas actualizaciones al índice y quiero agregar todos los files sin seguimiento a ese índice antes de comprometerme.

¿Hay alguna forma de agregar solo los files sin seguimiento al índice sin identificarlos individualmente? No veo nada obvio en los documentos de ayuda, pero tal vez me lo estoy perdiendo.

Gracias.

Es fácil con git add -i . Escriba a (para "agregar sin seguimiento"), luego * (para "todo"), luego q (para salir) y listo.

Para hacerlo con un solo command: echo -e "a\n*\nq\n"|git add -i

git ls-files -o --exclude-standard proporciona files sin seguimiento, por lo que puede hacer algo como a continuación (o agregarle un alias):

 git add $(git ls-files -o --exclude-standard) 

Puede agregar esto a su file ~ / .gitconfig:

 [alias] add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add" 

Luego, desde la command-line, solo ejecuta:

 git add-untracked 

No es exactamente lo que estás buscando, pero he encontrado esto bastante útil:

 git add -AN 

Agregará todos los files al índice, pero sin su contenido. Los files que no se rastrearon ahora se comportan como si hubieran sido rastreados. Su contenido se mostrará en git diff , y luego podrá agregarlo de manera interactiva con git add -p .

La gente ha sugerido conectar el resultado de git ls-files git add a git add pero esto va a fallar en los casos en que haya nombres de files que contengan espacios en blanco o caracteres globales como * .

La manera más segura sería usar:

 git ls-files -o --exclude-standard -z | xargs -0 git add 

donde -z le dice a git que use \0 terminadores de línea y -0 le dice a xargs lo mismo. La única desventaja de este enfoque es que la opción -0 no es estándar, por lo que solo algunas versiones de xargs admiten.

git ls-files list los files en el directory actual. Si desea listr files sin seguimiento desde cualquier lugar del tree, esto podría funcionar mejor:

 git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) 

Para agregar todos los files sin seguimiento en el tree:

 git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add 

Si tiene miles de files sin seguir (ugh, no pregunte), entonces git add -i no funcionará al agregar * . Obtendrá un error que indica que la Argument list too long .

Si también está en Windows (no pregunte # 2 🙂 y necesite usar PowerShell para agregar todos los files sin seguimiento, puede usar este command:

 git ls-files -o --exclude-standard | select | foreach { git add $_ } 

Intenté esto y funcionó:

 git stash && git add . && git stash pop 

git stash solo colocará todos los files modificados rastreados en una stack separada, luego los files restantes serán files sin seguimiento. Luego haciendo git add . pondrá en escena todos los files no rastreados, según sea necesario. Eventualmente, para get un set de todos los files modificados de stack by git stash pop

Para agregar todos los files sin seguimiento, el command git es

git add -A

Además, si desea get más detalles sobre varias opciones disponibles, puede escribir commands

git add -i

en lugar del primer command, con esto obtendrás más opciones, incluida la opción de agregar todos los files sin seguimiento como se muestra a continuación:

$ git add -i advertencia: LF será reemplazado por CRLF en README.txt. El file tendrá sus terminaciones de línea originales en su directory de trabajo. advertencia: LF será reemplazado por CRLF en package.json.

* Comandos * 1: estado 2: actualización 3: revertir 4: agregar untracked 5: patch 6: diff 7: salir 8: help ¿Qué pasa ahora?