我对特定文件进行了更改,并提交了一个提交,确切地说是多个提交,但没有一个被推送。 我需要在远程分支中找到该文件的最后一次提交的提交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)
答案 0 :(得分:1)
此命令应该起作用:
lastcommit=`git log --format=%h -1 <branch> -- $filename`
说明:
在给定文件名参数时,git log
将仅输出触摸该文件的提交。
格式%h
表示仅显示提交ID,没有其他内容。 %h
是缩写(取决于您的设置),如果愿意,您也可以使用%H
作为完整的提交ID。
选项-1
仅显示一次提交,这就是您想要的。警告:如果不存在此类提交,则$lastcommit
将为空。如果您在脚本中使用它,请测试该条件。
我在文件名前添加了--
,以防万一:通常是不需要的,但是它可以确定是否存在潜在的歧义,Git会将$filename
解释为文件名,而不是尝试将其解释为其他任何内容。它还将避免在文件不存在时生成关于修订或文件不存在的错误消息:相反,您会得到一个空的$lastcommit
,我认为在脚本中更容易对其进行测试。>