bash - 找到本地 git 分支的远程父分支

标签 bash git github version-control

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

我假设这是一个 4 步过程,前三个步骤可能如下:


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

git rev-parse --abbrev-ref HEAD    


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

git rev-parse HEAD          # full hash  


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

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


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

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

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

最佳答案

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

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

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

  1. 通过git branch -r列出所有远程分支(假设远程分支是origin/master, origin/dev来源/特征)。

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

    使用命令 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-master, origin-dev 和o原始特征)。它转换为与帖子 ( 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
    

关于bash - 找到本地 git 分支的远程父分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49619492/

相关文章:

bash - 使用 set -e 时如何处理退出代码并获取命令输出

git - 将一个分支的未暂存更改转移到另一个分支

具有私有(private) github 依赖项的 R 包

docker - 如何在Docker容器中运行VS Code的Extension Development Host来测试我的vscode扩展?

git - 将 Git 存储库添加到 Perforce 仓库

python - 无法在我的应用程序中验证 GitHub X-Hub-Signature

bash - 使用 awk/sed 追加和替换

linux - 检查环境变量

bash - 从图像为 FFmpeg 生成调色板

git svn clone 初始化后卡住