找到LOCAL git分支的REMOTE父分支

时间:2018-04-02 22:10:03

标签: bash git github version-control

如何获取当地git当前提交已分支的远程git分支的名称?

我认为这是一个4步骤的过程,前三个步骤可能如下:


第一步:获取当地git仓库中当前分支的名称:

git rev-parse --abbrev-ref HEAD    


第二步:从本地仓库获取当前检出的提交的哈希值:

git rev-parse HEAD          # full hash  


第三步:获取远程git仓库上游跟踪分支的名称:

git rev-parse --abbrev-ref @{upstream}


第四步:获取远程git仓库上的父上游跟踪分支的名称:

执行此操作需要哪些特定代码?在阅读了@ChrisJohnsen对this other posting的回答后,我想这个解决方案涉及查找从远程存储库中的另一个分支派生的最新提交。但是,链接发布的答案中的代码似乎都是为本地存储库设计的。 这个当前的问题是不同的,因为我问如何从本地存储库子分支中找到远程存储库父分支。

我正在添加bash标记,因为这些命令在可以使用bash脚本的CentOS服务器上运行。

2 个答案:

答案 0 :(得分:1)

  

但是,链接发布的答案中的代码似乎都是为本地存储库设计的。

仍然,您可以应用that code并检查结果(最近的祖先分支)is a remote branch(在初始git fetch之后)或者是否。 如果没有,请检查该本地父分支的父分支。

答案 1 :(得分:1)

要通过查看所有分支结构来获取远程父分支,您可以通过以下任何命令将提交历史记录打印为图形:

gitk --all
git log --oneline --decorate --graph --all

要仅通过脚本获取本地分支的远程父分支,可以基于远程分支创建本地临时分支。然后,您可以从临时分支中找到本地分支的父分支。找到临时分支是本地分支的父分支后,可以相应地获取远程分支。最后,删除所有临时分支。详细步骤如下:

  1. git branch -r列出所有远程分支(假设远程分支为origin/masterorigin/devorigin/feature。)

  2. 从本地分支机构获取跟踪/远程分支

    当您使用commmand git rev-parse --abbrev-ref @{upstream}时,获取给定本地分支的远程分支的方法(假设它是origin/master分支,您希望找到它的父分支。)

  3. 分别从远程分支创建本地临时分支

    git branch -b origin-master origin/master        #Create a local branch origin-master from origin/master
    git branch -b origin-dev origin/dev
    git branach -b origin-feature origin/feature
    
  4. 从临时分支

    中查找父分支

    现在您只需要从所有临时分支(origin-masterorigin-master和o origin-dev)中找到rigin-feature分支的父分支。它转换为与帖子(Find the parent branch of a Git branch)显示的情况相同。并且您可以使用相同的方式来实现。

  5. 将父分支转换为相应的远程分支

    例如,您发现origin-master分支的父分支是origin-dev,然后将-替换为/以获取远程父分支名称origin/dev

  6. 删除所有临时分支

    git branch -D origin-master
    git branch -D origin-dev
    git branch -D origin-feature