Cambio de detalle después de Git pull


Después de una extracción de Git, su salida da un resumen de la cantidad de cambio.

¿Cómo puedo ver todos o algunos de los cambios detallados de los archivos?

Bien, aquí está mi pregunta a Jefromi:

  1. ¿Cómo sé si me estaba tirando al maestro? Todo lo que hice fue "git pull".

  2. ¿A qué apunta master y cuál es la diferencia entre master y HEAD, las dos cabezas predeterminadas de Git?

  3. ¿Cómo veo el cambio detallado en un archivo?

  4. ¿Cómo veo el cambio en la salida del resumen por el último git pull de nuevo?

  5. ¿Cuál es la diferencia entre git diff y git whatchanged?

Author: Peter Mortensen, 2009-09-01

4 answers

Supongamos que estás tirando al maestro. Puede referirse a la posición anterior de master por master@{1} (o incluso master@{10.minutes.ago}; consulte la sección de especificación de revisiones de la página man de git-rev-parse), para que pueda hacer cosas como

  • Ver todos los cambios: git diff master@{1} master

  • Ver los cambios en un archivo dado: git diff master@{1} master <file>

  • Ver todos los cambios dentro de un directorio dado: git diff master@{1} master <dir>

  • Ver de nuevo el resumen de los cambios: git diff --stat master@{1} master

En cuanto a su pregunta de "¿cómo sé si estoy en maestro"... bueno, el uso de ramas es una parte importante del flujo de trabajo de Git. Siempre debes estar al tanto de la rama en la que te encuentras; si has realizado cambios, ¡quieres llevarlos a la rama correcta! Puede ver una lista de todas las ramas, con un asterisco por la que se encuentra actualmente, con el comando git branch. El nombre de la rama actual también se imprime junto con la salida de git status. Recomiendo encarecidamente hojear las páginas de manual de comandos a utilizar-es una gran manera de recoger poco a poco un poco de conocimiento.

Y tu última pregunta: HEAD es el nombre de la rama que se está revisando. También puedes usar HEAD y HEAD@{1} en este contexto, pero es un poco más robusto usar las ramas, ya que si vas y echas un vistazo a otra rama. {[9] } es ahora la segunda rama, y HEAD@{1} es ahora master - ¡no es lo que quieres!

Para evitar tener que hacer un montón de pequeñas preguntas como esta, probablemente debería tener un mira un tutorial de Git. Hay un millón en la web, por ejemplo:

 153
Author: Cascabel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-31 19:35:01

Digamos que haces un git pull como este:

$ git pull
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
From [email protected]:reponame
   a407564..9f52bed  branchname   -> origin/branchname
Updating a407564..9f52bed
Fast forward
 .../folder/filename          |  209 ++++++++-----
 .../folder2/filename2        |  120 +++++++++++---------
 2 files changed, 210 insertions(+), 119 deletions(-)

Puedes ver la diferencia de lo que cambió usando los números de revisión:

$ git diff a407564..9f52bed
 38
Author: Christian Oudard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-01 15:12:23

1. ¿Cómo sé si estaba tirando para dominar? Todo lo que hice fue "git pull".

El comando en sí funciona así:

git pull [options] [<repository> [<refspec>…]]

Y por defecto se refiere a la rama actual. Puede comprobar sus sucursales utilizando

git branch -a

Esto listará sus ramas locales y remotas como para, por ejemplo, so (Se agregó un --- como divisor entre local y remoto para que sea más claro)

*master
foo
bar
baz
---
origin/HEAD -> origin/master
origin/deploy
origin/foo
origin/master
origin/bar
remote2/foo
remote2/baz

Cuando eches un vistazo a un repositorio remoto, verás a lo que se refiere:

git remote show origin

Se listará de la siguiente manera:

* remote origin
  Fetch URL: ssh://[email protected]:12345/username/somerepo.git
  Push  URL: ssh://[email protected]:12345/username/somerepo.git
  HEAD branch: master
  Remote branches:
    foo    tracked
    master tracked
  Local refs configured for 'git push':
    foo    pushes to foo    (up to date)
    master pushes to master (fast-forwardable)

Así que es bastante fácil estar seguro de dónde tirar y empujar.

3. ¿cómo ver el cambio de detalle en un archivo específico?

4. ¿cómo ver el cambio en la salida de resumen por último git pull de nuevo?

La manera más fácil y más elegante (imo) es:

git diff --stat master@{1}..master --dirstat=cumulative,files

Esto le dará dos bloques de información sobre los cambios entre su último tirón y el estado actual del trabajo. Ejemplo de salida (agregué un --- como divisor entre --stat y --dirstat salida para hacerlo más claro):

 mu-plugins/media_att_count.php                     |  0
 mu-plugins/phpinfo.php                             |  0
 mu-plugins/template_debug.php                      |  0
 themes/dev/archive.php                             |  0
 themes/dev/category.php                            | 42 ++++++++++++++++++
 .../page_templates/foo_template.php                |  0
 themes/dev/style.css                               |  0
 themes/dev/tag.php                                 | 44 +++++++++++++++++++
 themes/dev/taxonomy-post_format.php                | 41 +++++++++++++++++
 themes/dev/template_parts/bar_template.php         |  0
 themes/someproject/template_wrappers/loop_foo.php  | 51 ++++++++++++++++++++++
---
 11 files changed, 178 insertions(+)
  71.3% themes/dev/
  28.6% themes/someproject/template_wrappers/
 100.0% themes/
  27.2% mu-plugins/
   9.0% themes/dev/page_templates/
   9.0% themes/dev/template_parts/
  63.6% themes/dev/
   9.0% themes/someproject/template_wrappers/
  72.7% themes/
 6
Author: kaiser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-19 01:43:24

Esta forma es un poco de hacky, pero te permitirá usar herramientas gráficas como gitk o gitg o git-gui:

git pull
git reset HEAD@{1}
gitg (or gitk or whatever tool you like)

La respuesta con más votos positivos da la mejor manera de usar la herramienta git, pero uso este método porque luego puedo utilizar herramientas con GUI para ver los cambios: P

Entonces tendría el paso adicional de hacer un git checkout . y luego hacer git pull de nuevo para que tire y combine correctamente, pero valoro la capacidad de examinar las diferencias en una GUI lo suficiente como para lidiar con los dos extra Steps.

 2
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-05 22:22:55