我正在使用git别名来在您无法推送的存储库中执行类似git push --force
的命令,但您可以删除远程分支。那么这有两个步骤:
脚本必须适用于本地分支和远程分支具有不同名称的情况。只有一个遥控器(原点),因此可以进行硬编码。别名只能在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
输出没有遥控器/部分的分支名称?
答案 0 :(得分:2)
有没有办法让
git rev-parse
输出没有遥控器/部分的分支名称?
不,但你不需要。你想知道上游中分支的名称是什么,那是git rev-parse
合作的两部分的后半部分。
也就是说,对于分支 B ,上游分为两部分:branch.B.remote
是远程的名称,branch.B.merge
是分支的名称< em> 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
格式是个好主意。另外,确保控制上游的人不会抱怨你正在回避反力规定。:-))