如何找到兩個Git分支的最新共同祖先?查找兩個Git分支的最新共同祖先
回答
您正在尋找git merge-base
。用法:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
請注意,這找到了最近的共同祖先......哪我相信是提問者想要的,所以+1。只是注意到,如果有人來這裏試圖找到*最古老的*共同的祖先(如我所做的) - 爲此,另請參見:http://stackoverflow.com/questions/1527234/finding-a-branch-point -with-git – lindes 2011-02-14 09:52:57
這可能是他正在尋找的內容,但手冊頁並不能保證它不是實時最新的或提交次數最多的版本:只是它將成爲最好的共同祖先之一。 – 2014-07-17 20:53:10
我想我會使用這個小片段:'$(git merge-base HEAD master)'。例如,'git log $(git merge-base HEAD master).. HEAD' – funroll 2014-09-08 15:48:56
一旦獲取時,共同的祖先SHA可以使用,例如,以查看遙控器上可用的提交,像這樣:
#!/bin/bash
git remote update
REMBR=`git show-remote-branch`
REMHEAD=`git rev-parse $REMBR`
MERGEBASE=`git merge-base HEAD $REMBR`
REMURL=`git config remote.origin.url`
git request-pull $MERGEBASE $REMURL $REMHEAD
這似乎與實際要求的內容非常相關。 – 2016-09-10 18:41:57
git diff master...feature
節目當前(可能是多次提交)功能分支的所有新提交。
man git-diff
文檔:
git diff A...B
是一樣的:
git diff $(git merge-base A B) B
但...
是更容易輸入和記憶。
如提到的by Dave,HEAD
的特例可以省略。所以:
git diff master...HEAD
是一樣的:
git diff master...
這是不夠的,如果當前分支是feature
。
最後,請記住,順序很重要!做git diff feature...master
將顯示在master
上的更改不在feature
上。
我希望更多的git命令可以支持這種語法,但我不認爲他們這樣做。有的甚至有不同的語義...
:What are the differences between double-dot ".." and triple-dot "..." in Git commit ranges?
或者只是'git diff master ...'在差異到'HEAD'的特殊情況下# – Dave 2016-11-01 16:41:25
隨着gitk
可以圖形方式查看兩個分支:
gitk branch1 branch2
然後很容易發現在兩個分支的歷史的共同祖先。
並非所有情況下都可以視覺化。有些原因可能需要以編程方式實現自動化。 – ADTC 2017-10-21 00:21:34
由於在之前的回答指出,git merge-base
作品:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
但如果myfeature
是當前分支,因爲是常見的,你可以使用使用--fork-point
:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
這個說法僅適用於最新版本的git。另請參閱this answer。
對於完整的提交信息,可以考慮:
$ git log -1 $(git merge-base --fork-point develop)
我有'git版本2.14.1.windows.1'。運行'git merge-base -fork-point branch2'並帶有一個分支_(帶有它自己的提交)_ **,**我知道**已經從當前分支分支出來不會產生任何結果,而'git merge-base branch1 branch2'正確顯示叉點。可能是什麼問題呢? – ADTC 2017-10-21 00:22:45
@ADTC檢出'branch2',然後運行'git merge-base --fork-point branch1'。 – 2017-10-21 01:58:09
是的,做到了。沒有再出現。 – ADTC 2017-10-21 02:16:28
- 1. 找到兩個以上分支的共同祖先
- 2. 如何以編程方式查找兩個分支的共同祖先
- 3. 沒有共同祖先的分支
- 4. python最低共同祖先
- 5. 在neo4j中查找最低共同祖先(LCA)
- 6. Neo4j的最低共同祖先
- 7. 查找鄰接列表中兩個節點的最低公共祖先
- 8. 在另一個分支中查找第一個祖先提交
- 9. 如何找到一棵樹的最低共同祖先?
- 10. Git合併2個版本沒有共同的祖先
- 11. SQL:查找hierarchyids的最低公共祖先
- 12. 查找XML節點集的最低公共祖先
- 13. 每個git commit都必須是分支的祖先嗎?
- 14. Neo4j最低共同祖先節點未找到
- 15. 找到給定的兩個節點的共同祖先的算法
- 16. 查找二叉搜索樹中兩個節點的最低共同祖先 - 高效
- 17. 使用.NET反射找到一個共同的祖先類
- 18. 查找祖先的DataTemplate
- 19. 尋找最少在二叉樹中的共同祖先o(h^2)換一個
- 20. 如何檢查一個分支是否是Git中的另一個分支的祖先
- 21. 如何在git merge中強制共同的祖先?
- 22. 用於檢查兩個人是否具有共同祖先的sql函數
- 23. 如何查找二叉樹中節點的第一個共同祖先?
- 24. 什麼的「重新映射到祖先」中的「git的過濾分支」
- 25. 泰坦圖中的共同祖先..
- 26. 最近公共祖先優化
- 27. 最低公共祖先 - 代碼說明
- 28. 最低公共祖先(升壓圖)
- 29. 爲什麼UITableViewCell和UITableViewHeaderFooterView不共享某個共同的祖先?
- 30. 選擇具有最接近的共同祖先的元素
定義最近的:真實世界的時間,提交的數量,其他指標? – 2014-07-17 20:51:37
相關(十字交叉合併):http://stackoverflow.com/questions/26370185/how-do-criss-cross-merges-arise-in-git – Jubobs 2014-12-26 12:21:52