2012-03-11 26 views
39

jestem przyzwyczajony do prowadzenia porównania git, która pozwoli porównania z lokalnymi obrotach git jak:git diff na datę?

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

Czy można używać zamiast datę? A jeśli tak, to w jaki sposób? Chciałbym móc wstawić zamiast "110" w powyższym przykładzie, datę taką jak "4 grudnia 2012".

Odpowiedz

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

Nie jest to, ściśle rzecz biorąc, rewizja dokonana trzy tygodnie temu. Zamiast tego było to stanowisko na trzy tygodnie przed teraźniejszością. Ale prawdopodobnie jest wystarczająco blisko do twoich celów - będzie to bardzo dokładne, jeśli obecna gałąź będzie się stale rozwijać, jak to zwykle bywa. Możesz poprawić dokładność, używając nazwy oddziału zamiast HEAD.

Zamiast przesunięcia w czasie rzeczywistym można również użyć daty/czasu, np. [email protected]{1979-02-26 18:30:00}. Zobacz git help rev-parse.

+0

Na ZSH otrzymuję awarię: 'zsh: parsować błąd blisko \'} ''Jakieś pomysły co do tego, co się tam dzieje? – ylluminate

+3

'zsh' próbuje zinterpretować nawiasy klamrowe. Cytuj je (podwójne cudzysłowy wokół całej rzeczy, lub ukośnik odwrotny przed każdym nawiasem, lub cokolwiek innego). – torek

+0

Dobrze, dzięki @torek. – ylluminate

1

Łącząc Jonathan Stray's suggestion to use git-rev-list --before znaleźć przegląd na dany dzień i 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]" 

nazywają ten skrypt z datą i ewentualnie niektórych nazwach plików, na przykład

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

To, czego chcesz, musi być tym.

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

Należy porównać z @{3 weeks ago}, nie [email protected]{3 weeks ago}.

Czym się różnią?

Jeśli byłeś w innej branży 3 tygodnie temu, [email protected]{3 weeks ago} wskaże HEAD oddziału, az drugiej strony @{3 weeks ago} wskaże HEAD bieżącego oddziału.

Można również jawnie nazwać oddział.

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