Ted
Ted

Reputation: 15285

Git: Find the most recent common ancestor of two branches

How to find the most recent common ancestor of two Git branches?

Upvotes: 1219

Views: 284736

Answers (6)

milahu
milahu

Reputation: 3539

find common ancestor of ALL branches

git merge-base $(git branch --format "%(refname)")

Upvotes: 3

hamza el aissaoui
hamza el aissaoui

Reputation: 1

git checkout myRep
git pull origin main --allow-unrelated-histories
git push origin myRep

Upvotes: -3

CB Bailey
CB Bailey

Reputation: 791691

You are looking for git merge-base. Usage:

$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

Upvotes: 1531

Asclepius
Asclepius

Reputation: 63282

As noted in a prior answer, although git merge-base works,

$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

If myfeature is the current branch, as is common, you can use --fork-point:

$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2

This argument works only in sufficiently recent versions of git. Unfortunately it doesn't always work, however, and it is not clear why. Please refer to the limitations noted toward the end of this answer.


For full commit info, consider:

$ git log -1 $(git merge-base --fork-point develop) 

Upvotes: 54

git diff master...feature

shows all the new commits of your current (possibly multi-commit) feature branch.

man git-diff documents that:

git diff A...B

is the same as:

git diff $(git merge-base A B) B

but the ... is easier to type and remember.

As mentioned by Dave, the special case of HEAD can be omitted. So:

git diff master...HEAD

is the same as:

git diff master...

which is enough if the current branch is feature.

Finally, remember that order matters! Doing git diff feature...master will show changes that are on master not on feature.

I wish more git commands would support that syntax, but I don't think they do. And some even have different semantics for ...: What are the differences between double-dot ".." and triple-dot "..." in Git commit ranges?

Upvotes: 83

Martin G
Martin G

Reputation: 18109

With gitk you can view the two branches graphically:

gitk branch1 branch2

And then it's easy to find the common ancestor in the history of the two branches.

Upvotes: 14

Related Questions