如何找到两个Git分支的最近的共同祖先?
当前回答
使用gitk,你可以以图形方式查看这两个分支:
gitk branch1 branch2
然后就很容易在这两个分支的历史中找到共同的祖先。
其他回答
您正在寻找git merge-base。用法:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Git差异控制…功能
显示当前(可能是多次提交)特性分支的所有新提交。
Man git-diff记录了:
git diff A...B
等于:
git diff $(git merge-base A B) B
但是…更容易打字和记忆。
正如Dave提到的,HEAD的特殊情况可以省略。所以:
git diff master...HEAD
等于:
git diff master...
如果当前分支是feature,这就足够了。
最后,记住顺序很重要!做git差异功能…Master将显示在Master上而不是在特性上的更改。
我希望更多的git命令能支持这种语法,但我不认为他们能做到。有些甚至对…有不同的语义。: Git的提交范围中,双点“..”和三点“…”有什么区别?
使用gitk,你可以以图形方式查看这两个分支:
gitk branch1 branch2
然后就很容易在这两个分支的历史中找到共同的祖先。
正如之前的回答中所提到的,尽管git merge-base可以工作,
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
如果myfeature是当前的分支,你可以使用——fork-point:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
这个参数只在最新版本的git中有效。然而,不幸的是,这种方法并不总是有效,原因也不清楚。请参阅本答案末尾注明的限制。
对于完整的提交信息,请考虑:
$ git log -1 $(git merge-base --fork-point develop)
git checkout myRep
git pull origin main --allow-unrelated-histories
git push origin myRep
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- 在GitHub上有一个公共回购的私人分支?
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式