ver modificados log comandos cambios archivos archivo git diff rake pull

log - git ver archivos modificados



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

Esto es muy similar a una pregunta que hice sobre cómo obtener cambios en una rama en git . Tenga en cuenta 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.

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

  1. Obtén la versión de mi repositorio 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 repositorio local.

En otras palabras, quiero obtener el último código del repositorio 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 rama actual tal como existía antes y después de la extracción. Tenga en cuenta que si la extracción no actualiza realmente la rama 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 registro, en orden 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 rama:

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


Si coloca esto en su perfil bash, podrá ejecutar grin (entrada remota git) y lechada (git remoto 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 }


Greg''s camino Greg''s debería funcionar (no yo, otro Greg: P). Con respecto a su comentario, el origen es una variable de configuración que establece Git cuando clona el depósito central en su máquina local. Esencialmente, un repositorio de Git recuerda 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 repositorio central.

Aquí hay un ejemplo de archivo 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