gpt4 book ai didi

git - 查找 Git 提交来自哪个分支

转载 作者:IT王子 更新时间:2023-10-29 01:09:36 26 4
gpt4 key购买 nike

有没有办法根据 SHA-1 找出提交来自哪个分支?哈希值?

如果你能告诉我如何使用 Ruby Grit 完成此任务,可加分。

最佳答案

虽然 Dav 没有直接存储信息是正确的,但这并不意味着您永远无法找到。以下是您可以执行的一些操作。

查找提交所在的分支

git branch -a --contains <commit>

这将告诉您在其历史记录中具有给定提交的所有分支。显然,如果提交已经 merge ,这就没那么有用了。

搜索reflogs

如果您在进行提交的存储库中工作,您可以在引用日志中搜索该提交的行。超过 90 天的 Reflog 会被 git-gc 修剪,所以如果提交太旧,你将找不到它。也就是说,您可以这样做:

git reflog show --all | grep a871742

找到提交 a871742。请注意,您必须使用提交的前 7 位缩写。输出应该是这样的:

a871742 refs/heads/completion@{0}: commit (amend): mpc-completion: total rewrite

表示提交是在分支“完成”上进行的。默认输出显示缩写的提交哈希值,因此请确保不要搜索完整的哈希值,否则您将找不到任何内容。

git reflog show 实际上只是 git log -g --abbrev-commit --pretty=oneline 的别名,所以如果你想摆弄输出格式以使不同的东西可用于 grep,这是你的起点!

如果您不在进行提交的存储库中工作,那么在这种情况下您能做的最好的事情就是检查引用日志并找出提交首次引入您的存储库的时间;幸运的话,您获取了它 promise 的分支。这有点复杂,因为您不能同时遍历提交树和引用日志。您想要解析 reflog 输出,检查每个散列以查看它是否包含所需的提交。

查找后续的 merge 提交

这是依赖于工作流的,但是如果有好的工作流,提交是在开发分支上进行的,然后被 merge 。你可以这样做:

git log --merges <commit>..

查看将给定提交作为祖先的 merge 提交。 (如果提交只 merge 一次,第一个应该是你之后的 merge ;否则我想你将不得不检查一些。) merge 提交消息应该包含 merge 的分支名称。

如果你希望能够依靠这样做,你可能想要使用 --no-ff 选项到 git merge 来强制创建 merge 提交,甚至在快进的情况下。 (不过,不要太急切。如果过度使用,这可能会变得令人困惑。)VonC's answer to a related question有助于详细阐述这个主题。

关于git - 查找 Git 提交来自哪个分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2706797/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com