我想要找到最近修改过源文件的提交记录。
我可以使用git blame
命令查看每行提交的日期,但很难确定哪个提交记录是最后一个修改该文件的。
如何在我的Git代码库中找到最后一个修改给定文件的提交记录?
git log
可以查看特定文件(和目录)的历史记录,因此您可以像这样调用它:
git log my/file.c
如果您只想列出最近的一次提交,例如在脚本中使用它,可以使用-n 1
选项:
git log -n 1 --pretty=format:%H -- my/file.c
--pretty=format:%h
告诉 git log
只显示提交哈希值。--
分隔符将文件名与提交名称分开,以防止其模糊不清。
git rev-list origin/user/bob/testbranch -1 src/bfiles/*.txt
git-log
是劣质的。 - Piotr Dobrogostgit-log
是瓷器化命令,git-rev-list
是管道化命令。 - blitzen9872如果您只想获取修改特定文件集的最新提交的哈希值(并希望避免使用 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
- 当尚未创建版本标签时我不确定这是否符合您的要求,但是如果您运行 git log <thefile>
命令,可以获取更改过该文件的提交记录。您可以选择最新的那个提交,它应该就是您要找的。
git log -n1 -- <thefile>
(或者将输出管道传递给 head -1
如果你想浪费资源)你就不必手动选择顶部的行(参见 Jo Liss 的答案)。 - Tobias Kienzler如果你想查看某次提交的SHA id,可以使用git log FILENAME
,然后使用git show SHA_ID_HERE
查看该次提交的信息。你甚至不需要输入完整的ID,前6个字符就足够了。
git show $(git log -1 --pretty="%H" -- FILENAME)
。 - Tobias Kienzler如果只需将引用放在一行中,请尝试以下操作:
git log -n1 --oneline <path> | awk '{print $1;}'
git log -- my/file.c
。 - FeifanZ