Answers:
如果您只想查找最新的提交,则不需要git-log
,而是想要git-rev-list
,它在提交路径中列出了更改该文件的提交对象,从最近的提交开始(按时间顺序)。简单的说:
git rev-list -1 <commit> <filename>
对于git-rev-list
您的情况,您只需提供:
这只是返回当前分支中的最新提交ID来更改该文件,例如: 215095e2e338525be0baeeebdf66bfbb304e7270
对于更复杂的示例,您可以使用标记名称,甚至是远程引用,并在通配符中包含相对路径名称,例如:
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
...哪个会告诉您该分支历史上通配符匹配的最新变化。rev-list的选项非常极端,它是最重要的管道命令之一,因此您可以按照可以想象的任何条件来包括或排除。
当然,请参考git-rev-list(1)手册页。
git-log
不佳。
git-log
是瓷器,git-rev-list
是水管。
如果您只想获取最新提交的哈希值以修改一组特定的文件(并且要避免awk
使用),则可以使用:
git log -n 1 --pretty=format:%h -- <path>
这对于获取提交哈希值以供随后与结合使用非常有用git describe
。
例如(以防对任何人有用)…
我通过考虑更改任何源文件的最新提交来创建当前版本ID(假设您使用标记来标记版本mycode-1.2.1
):
COMMIT=$(git log -n 1 --pretty=format:%h -- *.c *.h)
if VN=$(git describe --always --abbrev=5 --match "mycode-*" $COMMIT 2>/dev/null) &&
case "$VN" in
mycode-*)
git update-index -q --refresh
test -z "$(git diff-index --name-only HEAD *.c *.h)" ||
VN="$VN-mod" ;;
*) VN="mycode-unknown-g$VN" ;;
esac
then
continue
else
VN="mycode-unknown"
fi
这将产生如下ID:
mycode-1.2.1
-当源文件的当前状态对应于标记版本时mycode-1.2.1-g3k7s2
-当源文件的当前状态对应于遵循标记版本的提交时mycode-1.2.1-g3k7s2-mod
-自从标记版本后的最后一次提交以来修改了源文件的当前状态mycode-unknown
-尚未创建版本标签时$VN
看起来像某种噩梦般的亡灵SVN
我不确定这是否是您想要的,但是如果您执行a git log <thefile>
来获取更改该文件的提交,则不确定。您可以选择最上面的一个。它应该是您要寻找的那个。
-n
并-1
直接使用。
--all
选项来考虑所有分支。