¿Cómo puedo generar un git diff de lo que ha cambiado desde la última vez que lo saqué?

Me gustaría escribir, preferiblemente en rake, las siguientes acciones en un solo command:

  1. Obtén la versión de mi repository git local.
  2. Git saca el último código.
  3. Git difiere de la versión que extraje en el paso # 1 a lo que ahora está en mi repository local.

En otras palabras, quiero get el último código del repository central y generar inmediatamente una diferencia de lo que ha cambiado desde la última vez que lo saqué.

Podrías hacer esto de forma bastante simple con refspecs.

git pull origin git diff @{1}.. 

Eso le dará una diferencia de la twig actual tal como existía antes y después de la extracción. Tenga en count que si la extracción no actualiza realmente la twig actual, la diferencia le dará los resultados incorrectos. Otra opción es grabar explícitamente la versión actual:

 current=`git rev-parse HEAD` git pull origin git diff $current.. 

Yo personalmente uso un alias que simplemente me muestra un logging, en order inverso (es decir, de más antiguo a más nuevo), sin fusiones, de todas las confirmaciones desde mi última extracción. Ejecuto esto cada vez que mi extracción actualiza la twig:

 git config --global alias.lcrev 'log --reverse --no-merges --stat @{1}.. 

El path de Greg debería funcionar (no yo, otro Greg: P). Con respecto a su comentario, el origen es una variable de configuration que establece Git cuando clona el depósito central en su máquina local. Esencialmente, un repository de Git restring de dónde vino. Sin embargo, puede establecer estas variables manualmente si necesita usar git-config.

 git config remote.origin.url <url> 

donde url es la ruta remota a su repository central.

Aquí hay un ejemplo de file por lotes que debería funcionar (no lo he probado).

 @ECHO off :: Retrieve the changes, but don't merge them. git fetch :: Look at the new changes git diff ...origin :: Ask if you want to merge the new changes into HEAD set /p PULL=Do you wish to pull the changes? (Y/N) IF /I %PULL%==Y git pull 

Esto es muy similar a una pregunta que hice sobre cómo get cambios en una twig en git . Tenga en count que el comportamiento de git diff vs. git log es inconsistentemente diferente cuando se usan dos puntos contra tres puntos. Pero, para su aplicación, puede usar:

 git fetch git diff ...origin 

Después de eso, un git pull fusionará los cambios en tu HEAD.

Si coloca esto en su perfil bash, podrá ejecutar grin (input remota git) y lechada (git remote saliente) para ver las diferencias de confirmaciones entrantes y salientes para el maestro de origen.

 function parse_git_branch { git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' } function gd2 { echo branch \($1\) has these commits and \($2\) does not git log $2..$1 --no-merges --format='%h | Author:%an | Date:%ad | %s' --date=local } function grin { git fetch origin master gd2 FETCH_HEAD $(parse_git_branch) } function grout { git fetch origin master gd2 $(parse_git_branch) FETCH_HEAD }