【问题标题】:Find the last commit ID of a File in the remote branch在远程分支中查找文件的最后提交 ID
【发布时间】:2019-06-10 15:10:00
【问题描述】:

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

所以我试图在远程分支中找到 repo 的最后一次提交,但是预期的特定文件的这个提交是在 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 (say)

两个都被推了, 所以分支中repo的最后一个commit 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"

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

【问题讨论】:

    标签: git github


    【解决方案1】:

    这个命令应该可以工作:

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

    解释:

    当给定文件名参数时,git log 将只输出涉及该文件的提交。

    %h 格式表示只显示提交 ID,仅此而已。 %h 是缩写(取决于您的设置),如果您愿意,也可以使用 %H 作为完整的提交 ID。

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      相关资源
      最近更新 更多