Git diff на дату?
Я привык использовать сравнение git, которое позволит сравнивать с локальными git revs вроде:
git diff HEAD HEAD~110 -- some/file/path/file.ext
Возможно ли использовать дату? И если да, то как? Я хотел бы иметь возможность вставить вместо "110" в приведенном выше примере такую дату, как "4 декабря 2012 года".
Ответы
Ответ 1
git diff HEAD '[email protected]{3 weeks ago}' -- some/file/path/file.ext
Это не является, строго говоря, ревизией, сделанной три недели назад. Вместо этого это положение HEAD
было за три недели до настоящего времени. Но это, вероятно, достаточно близко для ваших целей - это будет очень точно, если текущая ветвь HEAD
будет двигаться вперед неуклонно, как это обычно бывает. Вы можете повысить точность с помощью имени ветки вместо HEAD
.
Вместо смещения от существующего вы также можете использовать дату/время, например [email protected]{1979-02-26 18:30:00}
. См. git help rev-parse
.
Ответ 2
Объединяя предложение Джонатана Стрэйт использовать git-rev-list --before
, чтобы найти ревизию в заданную дату и Показать только текущую ветку в 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]"
Вызвать этот script с датой и необязательными именами файлов, например
git-diff-since yesterday
git-diff-since '4 Dec 2012' some/file/path/file.ext
Ответ 3
То, что вы хотите, должно быть таким.
git diff HEAD '@{3 weeks ago}' -- some/file/path/file.ext
Вы должны сравнить с @{3 weeks ago}
, а не [email protected]{3 weeks ago}
.
В чем разница?
Если вы были в другом филиале 3 недели назад, [email protected]{3 weeks ago}
укажет HEAD ветки, с другой стороны @{3 weeks ago}
будет указывать HEAD текущей ветки.
Вы также можете явно указать ветку.
git diff HEAD '[email protected]{3 weeks ago}' -- some/file/path/file.ext