git diff在约会?

时间:2012-03-11 19:22:10

标签: git

我习惯于运行git比较,以便与本地git revs进行比较,如:

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

是否可以使用日期?如果是这样,怎么样?我希望能够代替上面例子中的“110”,日期如“2012年12月4日”。

3 个答案:

答案 0 :(得分:65)

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

答案 1 :(得分:9)

你想要的就是这个。

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

答案 2 :(得分:3)

结合Jonathan Stray's suggestion to use git-rev-list --before查找给定日期的修订版和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" -- "$@"

使用日期和可选的某些文件名(例如

)调用此脚本
git-diff-since yesterday
git-diff-since '4 Dec 2012' some/file/path/file.ext