git:输出当前跟踪的分支名称,而没有远程名称



我正在研究一个git别名,以在无法推动强制的存储库中执行类似 git push --force的命令,但是您可以删除远程分支。因此,这两个步骤:

  1. 删除远程分支
  2. 将本地分支推向远程

在本地分支的情况下,脚本必须工作,而远程分支具有不同的名称。只有一个遥控器(原点(,因此可以进行硬编码。别名仅在bash壳中运行。

我被卡住了正确的上游分支名称。我知道我可以通过命令在git上获得上游跟踪的分支:

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

然而,它以格式 <remote_name>/<branch_name>返回分支的名称,例如: onement/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在没有远程/零件的情况下输出分支的名称?

有什么方法可以使git rev-parse输出分支的名称,而无需遥控/零件?

不,但是您不需要。您想知道该分支的名称在上游上是什么,这是git rev-parse使用的两部分的后半部分。

也就是说,对于分支 b ,上游设置为两个部分: branch.B.remote是遥控器的名称, branch.B.merge是 on 的分支的名称偏僻的。因此,如果my_working_branch具有origin/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格式。此外,请确保控制上游的人不会抱怨您要避免使用反强制规定。(

最新更新