Git:输出当前跟踪的分支名称,不带远程名称

时间:2017-04-21 14:04:21

标签: git bash version-control

我正在使用git别名来在您无法推送的存储库中执行类似git push --force的命令,但您可以删除远程分支。那么这有两个步骤:

  1. 删除远程分支
  2. 将本地分支推送到远程
  3. 脚本必须适用于本地分支和远程分支具有不同名称的情况。只有一个遥控器(原点),因此可以进行硬编码。别名只能在bash shell中运行。

    我被困在获得正确的上游分支名称。我知道我可以使用命令在git上获取上游跟踪分支:

    git rev-parse --abbrev-ref --symbolic-full-name @{upstream}

    然而,它返回格式为<remote_name>/<branch_name>的分支的名称,例如: origin / my_working_branch

    并且会使推送失败,因为它会发出以下命令:

    # this fails as the branch origin/my_working_branch does not exist
    git push origin :origin/my_working_branch
    
    # this will create a branch named 'origin/my_working_branch' in the remote, which is not what I want
    git push origin my_working_branch:origin/my_working_branch
    

    有没有办法让git rev-parse输出没有遥控器/部分的分支名称?

1 个答案:

答案 0 :(得分:2)

  

有没有办法让git rev-parse输出没有遥控器/部分的分支名称?

不,但你不需要。你想知道上游中分支的名称是什么,那是git rev-parse合作的两部分的后半部分。

也就是说,对于分支 B ,上游分为两部分:branch.B.remote是远程的名称,branch.B.merge是分支的名称< em> on 遥控器。因此,如果my_working_branchorigin/badbranch作为其上游,其他所有内容都是正常的,那么:

git config --get branch.my_working_branch.remote

将输出origin,并且:

git config --get branch.my_working_branch.merge

将输出您想要的字符串:refs/heads/badbranch

请注意,其中一个或两个可能是 un -set,在这种情况下,没有定义的上游;如果branch.B.remote是字面点.字符,则上游是您自己的存储库。

(在删除和重新创建分支时使用完全限定的refs/heads/branch格式是个好主意。另外,确保控制上游的人不会抱怨你正在回避反力规定。:-))