Git - how to find first commit of specific branch

匿名 (未验证) 提交于 2019-12-03 02:38:01

问题:

In following example tree:

A-B-C-D-E (master branch)     \      F-G-H (xxx branch) 

I'm looking for F - the first commit in xxx branch. I think that it is possible with:

git log xxx --not master 

and the last listed commit should be F. Is it correct solution or maybe there are some disadvantages of it?

I know that there were similar questions on stackoverflow, but nobody proposed such solution, and I'm not sure if I do it right.

回答1:

git log master..branch --oneline | tail -1 

dot-dot gives you all of the commits that the branch has that master doesn't have. tail -1 returns the last line from the previous output.



回答2:

You should use the merge-base functionality which is designed to solve exactly this:

git merge-base remotes/origin/ develop  


回答3:

If your branch (old one) once again merged back to master doesn't give expected result.I have using python script to find initial branch commit Id.

git rev-list --first-parent changeset

--first-parent follow only the first parent commit upon seeing a merge commit.

Iterate changeset's from above command until parent branch found.

def status_check(exec_command, exec_dir=None, background=False):     if exec_dir:         os.chdir(exec_dir)     res = subprocess.Popen(exec_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)     if not background:         result = res.communicate()     return result    def findNewBranchCommits(changeset=None):     cmd = "git rev-list --first-parent "+ changeset     rev_list = status_check(cmd,self.module_dir)     rev_list = str(rev_list[0]).split('\n')     rev_list = list(filter(None, rev_list))     for x in rev_list:                      # Iterate until branch base point         rev_cmd = "git branch --contains " + x         rev_cmd = status_check(rev_cmd,self.module_dir)         rev_cmd = str(rev_cmd[0]).split('\n')         if(len(rev_cmd) > 2):              print "First Commit in xxx branch",x             break  findNewBranchCommits(changeset) 


回答4:

git rev-list --ancestry-path $(git merge-base master xxx)..xxx | tail -1



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