2012-03-11 24 views
39

estoy acostumbrado a correr una comparación git que permitirá la comparación con git revoluciones locales como:git diff on date?

git diff HEAD HEAD~110 -- some/file/path/file.ext 

¿Es posible utilizar la fecha en su lugar? Y si es así, ¿cómo? Me gustaría poder insertar en lugar del "110" en el ejemplo anterior, una fecha como "4 de diciembre de 2012".

Respuesta

51
git diff HEAD '[email protected]{3 weeks ago}' -- some/file/path/file.ext 

Esto no es, estrictamente hablando, la revisión realizada hace tres semanas. En cambio, es la posición HEAD fue en tres semanas antes del presente. Pero probablemente esté lo suficientemente cerca para sus propósitos: será muy preciso si la rama actual HEAD avanza de manera constante, como la mayoría tiende a hacer. Puede mejorar la precisión utilizando un nombre de rama en lugar de HEAD.

En lugar de un desplazamiento desde el presente, también puede usar una fecha/hora, como [email protected]{1979-02-26 18:30:00}. Ver git help rev-parse.

+0

En ZSH Estoy obteniendo un error de: 'zsh: error de parseo cerca de \'} ''¿Alguna idea de qué puede estar pasando allí? – ylluminate

+3

'zsh' está tratando de interpretar las llaves por usted. Citarlos (comillas dobles alrededor de todo, o barra invertida antes de cada llave, o lo que sea). – torek

+0

Derecha, gracias @torek. – ylluminate

1

Combinando Jonathan Stray's suggestion to use git-rev-list --before para encontrar la revisión en una fecha determinada y Show just the current branch in Git:

#!/bin/sh 
if [ $# -eq 0 ] || [ "$1" = "--help" ]; then 
    cat <<EOF 
Usage: $0 DATE FILE... 
git diff on FILE... since the specified DATE on the current branch. 
EOF 
    exit 
fi 

branch1=$(git rev-parse --abbrev-ref HEAD) 
revision1=$(git rev-list -1 --before="$1" "$branch1") 
shift 

revision2=HEAD 

git diff "$revision1" "$revision2" -- "[email protected]" 

Llame a este guión con una fecha y, opcionalmente, algunos nombres de archivo, por ejemplo,

git-diff-since yesterday 
git-diff-since '4 Dec 2012' some/file/path/file.ext 
2

Lo que quieres debe ser esto.

git diff HEAD '@{3 weeks ago}' -- some/file/path/file.ext 

Usted debe comparar con @{3 weeks ago}, no [email protected]{3 weeks ago}.

¿Qué es la diferencia?

Si estuvo en otra sucursal hace 3 semanas, [email protected]{3 weeks ago} apuntaría la CABEZA de la rama, por otro lado @{3 weeks ago} señalaría la CABEZA de la rama actual.

También puede nombrar explícitamente la bifurcación.

git diff HEAD '[email protected]{3 weeks ago}' -- some/file/path/file.ext