Git - how to find first commit of specific branch

后端 未结 7 426
长发绾君心
长发绾君心 2020-11-30 18:35

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

相关标签:
7条回答
  • 2020-11-30 19:03
    git cherry master -v | head -n 1
    
    0 讨论(0)
  • 2020-11-30 19:08
    git cherry master -v | tail -1   
    

    however this will only give you the first commit on branch xxx that is not in master, not the first commit on branch xxx ever. the latter would be difficult if branch xxx has been deleted and/or re-created one or more times. it that case you could try the following:

    git reflog | grep checkout | grep xxx | tail -1   
    
    0 讨论(0)
  • 2020-11-30 19:09

    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)
    
    0 讨论(0)
  • 2020-11-30 19:12

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

    git merge-base remotes/origin/<branch> develop 
    
    0 讨论(0)
  • 2020-11-30 19:14
    git log master..branch --oneline | tail -1
    

    Where "branch" is your specific branch name. The 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.

    0 讨论(0)
  • 2020-11-30 19:20

    I tried this command and it worked:

    git log <source_branch> <feature_branch> --oneline | tail -1
    
    0 讨论(0)
提交回复
热议问题