git diff在约会?

yll*_*ate 54 git

我习惯于运行git比较,这将允许与本地git revs进行比较,如:

git diff HEAD HEAD~110 -- some/file/path/file.ext
Run Code Online (Sandbox Code Playgroud)

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

Bor*_*lid 72

git diff HEAD 'HEAD@{3 weeks ago}' -- some/file/path/file.ext
Run Code Online (Sandbox Code Playgroud)

严格来说,这不是三周前的修订.相反,它的位置HEAD是在现在之前三周.但它可能足以满足您的目的 - 如果当前分支机构HEAD稳步前进,将会非常准确,正如大多数人所做的那样.您可以使用分支名称而不是分支名称来提高准确性HEAD.

您也可以使用日期/时间,而不是从现在的偏移量HEAD@{1979-02-26 18:30:00}.见git help rev-parse.

  • 正如@cnst所说,这不适用于新结账.它会给出错误"警告:记录'HEAD'只能回到......".要解决这个问题,你可以找出你要比较的SHA,比如`git rev-list -1 --before ="2016-03-27 12:00"master` (5认同)
  • `zsh`试图为你解释大括号.引用它们(围绕整个事物的双引号,或每个括号之前的反斜杠,或其他). (3认同)
  • 好吧,如果您重新签出存储库,这似乎不起作用,我的理解是您引用的功能基于“git-reflog”,而不是“git-log”。 (2认同)

San*_*Lee 10

你想要的就是这个.

git diff HEAD '@{3 weeks ago}' -- some/file/path/file.ext
Run Code Online (Sandbox Code Playgroud)

你应该比较@{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
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 5

结合Jonathan Stray 的建议,用于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" -- "$@"
Run Code Online (Sandbox Code Playgroud)

使用日期和可选的一些文件名调用此脚本,例如

git-diff-since yesterday
git-diff-since '4 Dec 2012' some/file/path/file.ext
Run Code Online (Sandbox Code Playgroud)