Подтвердить что ты не робот

Git diff на дату?

Я привык использовать сравнение git, которое позволит сравнивать с локальными git revs вроде:

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

Возможно ли использовать дату? И если да, то как? Я хотел бы иметь возможность вставить вместо "110" в приведенном выше примере такую ​​дату, как "4 декабря 2012 года".

4b9b3361

Ответ 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