我正在研究一个git别名,以在无法推动强制的存储库中执行类似 git push --force
的命令,但是您可以删除远程分支。因此,这两个步骤:
- 删除远程分支
- 将本地分支推向远程
在本地分支的情况下,脚本必须工作,而远程分支具有不同的名称。只有一个遥控器(原点(,因此可以进行硬编码。别名仅在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
格式。此外,请确保控制上游的人不会抱怨您要避免使用反强制规定。(