在远程分支中找到文件的最后提交ID

时间:2019-06-10 15:10:00

标签: git github

我对特定文件进行了更改,并提交了一个提交,确切地说是多个提交,但没有一个被推送。 我需要在远程分支中找到该文件的最后一次提交的提交ID。

所以我试图在远程分支中找到仓库的最后一次提交,但是这个特定文件的提交是在git日志中显示的最后一次提交之前。

git log

git rev-parse --short <branch>

所以考虑有两个文件, 名为A.txt,B.txt

A.txt在2019年1月1日被修改并提交,ID:abc123(say)

B.txt于2019年1月12日被修改并提交,ID:abd456(说)

都被推了, 所以分支中仓库的最后一个提交ID是abc456

考虑一下,今天,我对A.txt进行了更改,并进行了多次提交,ID:def123,def456,def789 但是我没有将其推送到远程分支。

我正在尝试过滤提交ID abc123之后在A.txt中修改的行,那么如何实现这一目标,

我可以使用

修改预期的日志行
git blame "$filename" | sort -b -k 3 | grep -i "$lastcommit" -B 100 | grep -v "$lastcommmit"

但是如何获取特定文件的最后提交(在远程分支中)。 使用远程分支上存储库的最后一次提交,我无法获得预期的结果(很显然,因为这里没有匹配的提交ID)

1 个答案:

答案 0 :(得分:1)

此命令应该起作用:

lastcommit=`git log --format=%h -1 <branch> -- $filename`

说明:

在给定文件名参数时,git log将仅输出触摸该文件的提交。

格式%h表示仅显示提交ID,没有其他内容。 %h是缩写(取决于您的设置),如果愿意,您也可以使用%H作为完整的提交ID。

选项-1仅显示一次提交,这就是您想要的。警告:如果不存在此类提交,则$lastcommit将为空。如果您在脚本中使用它,请测试该条件。

我在文件名前添加了--,以防万一:通常是不需要的,但是它可以确定是否存在潜在的歧义,Git会将$filename解释为文件名,而不是尝试将其解释为其他任何内容。它还将避免在文件不存在时生成关于修订或文件不存在的错误消息:相反,您会得到一个空的$lastcommit,我认为在脚本中更容易对其进行测试。