Obtenga un file nuevo y modificado (estado real) por git

Mi situación

Quiero get files nuevos y modificados y luego hacer algo como compress De consideración a la efficacy , no puedo search todos los files cada vez. Así que git viene a mi mente.

Sé que el git status puede ayudarme a get todos los files modificados y luego puedo filtrarlos solo. Pero hay un problema. Déjenme dar un ejemplo.

Tengo un file llamado text.txt cuyo contenido es Hello . Luego modifiqué su contenido a Hello World . Ahora ejecuto git add test.txt . Finalmente recupero su contenido a Hello .

  • Si esta vez también ejecuto git add test.txt , entonces el git status me da nada. git add test.txt bien porque, de hecho, el file no se ha modificado.
  • Si esta vez no, el git status muestra

Cambios a cometer: modificado: test.txt

Cambios no realizados para commit: modified: test.txt

Mi pregunta

¿Hay alguna manera de hacer tal cosa por git ?

Editar

Tal vez git no funciona en esta situación. ¿Hay otra manera?

La respuesta directa es no.

El mecanismo para git para rastrear cambios no confirmados como a continuación:

enter image description here

Git tiene tres estados principales en los que pueden residir tus files: commited, modified y stage. Compromiso significa que los datos se almacenan de forma segura en su database local. Modificado significa que ha cambiado el file pero aún no lo ha comprometido con su database. En etapas significa que ha marcado un file modificado en su versión actual para ir a su próxima instantánea de confirmación.

Más detalles, puede referirse a Git Basics .

Cambios no escalonados para commit: que listn los files con estados modificados.

Cambios a cometer: enumere los files que están en etapas y esperando que se grabe el file preparado para la siguiente confirmación.

  • Para la segunda operación, como lo intentó (use el git status directamente), es causada por el cambio de la connection de test.txt a Hello World y la etapa de este file por primera vez. Entonces tiene el estado Changes to be committed: modified: test.txt . Cuando cambiaste el contenido test.txt atrás ( Hello ), también tiene un estado modificado (comparó el directory de trabajo con la versión por etapas) para test.txt Changes not staged for commit: modified: test.txt .

  • Para la primera operación que probó (use git add test.txt por segunda vez), cuando git add test.txt el contenido modificado Hello por segunda vez, se puede detectar que no haya cambios entre la versión de la etapa y la versión confirmada actual (comparar entre versión en etapas y la versión actual en la carpeta .git ). Entonces, git no muestra nothing to commit, working tree clea .

En una palabra , si cambia un file varias veces sin confirmar durante el time, git no rastreará los cambios no confirmados.

use git diff para mostrar las diferencias entre un commit, su carpeta de trabajo, etc.

para reference:

documentation de git diff

Excelente respuesta a la pregunta relacionada aquí en SO que entra en más detalles

No estoy completamente seguro de sus necesidades, pero si solo desea una list compacta de los files modificados, puede intentar:

git status -s

eso volverá:

MM text.txt

la primera "M" significa "Cambios a cometer", los segundos "M" son las siglas en inglés de "Cambios no realizados para la confirmación".