Git: How to list commits on a merged branch?

久未见 提交于 2020-05-27 05:00:19

问题


This is the inverse of how to list commits on a branch but not merged branches, so I'll ask it in the same format. Let's say my git commit history looks like this:

A---B---C---D---E---F master
     \         /
      X---Y---Z topic

How do I list the commits on the topic branch -- that is, X, Y, and Z? Note that simply doing git log topic won't work -- that will return commits A and B as well.

I had thought I could run git merge-base topic master to find B, and then do git log B..Z to get these commits. Unfortunately, git merge-base topic master returns Z, not B, which makes sense in retrospect -- since Z is already merged to master, the first commit between topic and master that shares history is Z.


回答1:


You can use the following command:

git log topic --not $(git rev-list master ^topic --merges | tail -1)^

git rev-list master ^topic --merges returns the SHA-1 keys for all merge commits from master to topic; since it's possible that there are multiple merge commits I use tail -1 to just get the last merge commit which is the merge commit of master and topic.

Then we log all commits for topic while omiting all commits for the first parent of the merge commit (--not <merge-commit>^).

To use this command effectively I would define an alias as follows:

git config --global alias.<alias-name> '!f() { git log $1 --not $(git rev-list $2 ^$1 --merges | tail -1)^; }; f'

Which then can be used like this git <alias-name> topic master.


Just for your information:
In my git version (1.9.0) it would also work if you omit tail but I thought it would be cleaner to only return the relevant SHA-1 key.



来源:https://stackoverflow.com/questions/23520125/git-how-to-list-commits-on-a-merged-branch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!