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:
- Obtén la versión de mi repositorio git local.
- Git saca el último código.
- 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