мерзавец diff на дату? - PullRequest
       8

мерзавец diff на дату?

48 голосов
/ 11 марта 2012

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

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

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

Ответы [ 3 ]

67 голосов
/ 11 марта 2012
git diff HEAD 'HEAD@{3 weeks ago}' -- some/file/path/file.ext

Это, строго говоря, не ревизия, сделанная три недели назад.Вместо этого это позиция HEAD была за три недели до настоящего времени.Но это, вероятно, достаточно близко для ваших целей - это будет очень точно, если текущая ветвь HEAD будет двигаться вперед устойчиво, как это обычно делают большинство.Вы можете повысить точность, используя имя ветви вместо HEAD.

Вместо смещения от настоящего момента вы также можете использовать дату / время, например HEAD@{1979-02-26 18:30:00}.Смотри git help rev-parse.

9 голосов
/ 23 декабря 2016

То, что вы хотите, должно быть таким.

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

Вы должны сравнить с @{3 weeks ago}, а не HEAD@{3 weeks ago}.

В чем разница?

Если бы вы были в другой ветви 3 недели назад, HEAD@{3 weeks ago} будет указывать HEAD ветви, с другой стороны, @{3 weeks ago} будет указывать HEAD текущей ветви.

Вы также можете явно назвать ветвь.

git diff HEAD 'master@{3 weeks ago}' -- some/file/path/file.ext
3 голосов
/ 07 сентября 2016

Объединение предложения Джонатана Стрея использовать 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" -- "$@"

Назовите этот скрипт с датой и, возможно, с некоторыми именами файлов, например,

git-diff-since yesterday
git-diff-since '4 Dec 2012' some/file/path/file.ext
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...