使用 update-refs 重命名和修复错误后无法推送分支
Cannot push branch after renaming and fixing error with update-refs
我想将我的本地分支从 sort-rows-of-common-tables
重命名为 develop/sort-rows-of-common-tables
,然后将其作为新分支推送到远程。我已经有一个名为 develop
.
的本地和远程分支
所以我尝试了
git branch -m develop/sort-rows-of-common-tables
但我得到了
error: 'refs/heads/develop' exists; cannot create 'refs/heads/develop/sort-rows-of-common-tables'
所以我读了这个SO answer并通过运行ning
成功解决了问题
git update-ref -d refs/heads/develop
git branch -m develop/sort-rows-of-common-tables
现在我想在远程推送 develop/sort-rows-of-common-tables
分支,这个分支还不存在,而 develop
分支已经存在。
所以我尝试运行
git push origin develop/sort-rows-of-common-tables
但我明白了
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 607 bytes | 607.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
remote: error: cannot lock ref 'refs/heads/develop/sort-rows-of-common-tables': 'refs/heads/develop' exists; cannot create 'refs/heads/develop/sort-rows-of-common-tables'
To my_git_repo.git
! [remote rejected] develop/sort-rows-of-common-tables -> develop/sort-rows-of-common-tables (failed to update ref)
error: failed to push some refs to 'my_git_repo.git'
看起来我在本地遇到了同样的错误,所以我敢打赌,为了在远程修复它,我必须 运行 一个类似于我 运行 的命令before (git update-ref -d refs/heads/develop
) 以远程引用为目标。
是否正确?如果是,我该如何更新远程引用?
我已搜索 git documentation 相关问题,但没有成功。
It looks like I get the same error I was getting on local,
是的,完全正确。
so I bet that in order to fix it on remote I have to run a command similar to the one I run before (git update-ref -d refs/heads/develop) which targets the remote refs.
差不多。您不能 运行 在远程端完全执行此命令。但是您可以通过推送删除远程分支:
git push origin :develop
或
git push origin --delete develop
已解决
我遇到的问题不是技术问题,而是 logical/practical 问题:
如果您在一个分支上工作,在这种情况下 develop
,包含对您的原样/“标准”代码的一些更改(假设原样代码位于 master
分支)开发名为 develop/added-something
、develop/added-something else
等的其他分支是没有意义的,因为那样的话 develop 中的更改将没有任何描述它们的“规范”(类似于 /specification-of-the-changes
)。
这被 git 正确地禁止了,即,有一个现有的分支 changes
,不允许有像 changes/specification
.
这样命名的分支
Not functional (and forbidden by git):
develop/added-element1
develop/added-element2
develop/added-element3
develop
# so what characterize this
branch?
相反,应该有一个存放 AS IS 代码的存储库(比方说 master
),然后是许多分支,存放正在进行更改的代码,并且这些分支应遵循类似 develop/added-something
, develop/added-something-else
, 其中在分支名称中清楚地恢复了表征它们的特征。
Functional (and allowed by git):
develop/added-element1
develop/added-element2
develop/added-element3
我想将我的本地分支从 sort-rows-of-common-tables
重命名为 develop/sort-rows-of-common-tables
,然后将其作为新分支推送到远程。我已经有一个名为 develop
.
所以我尝试了
git branch -m develop/sort-rows-of-common-tables
但我得到了
error: 'refs/heads/develop' exists; cannot create 'refs/heads/develop/sort-rows-of-common-tables'
所以我读了这个SO answer并通过运行ning
成功解决了问题git update-ref -d refs/heads/develop
git branch -m develop/sort-rows-of-common-tables
现在我想在远程推送 develop/sort-rows-of-common-tables
分支,这个分支还不存在,而 develop
分支已经存在。
所以我尝试运行
git push origin develop/sort-rows-of-common-tables
但我明白了
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 4 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 607 bytes | 607.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
remote: error: cannot lock ref 'refs/heads/develop/sort-rows-of-common-tables': 'refs/heads/develop' exists; cannot create 'refs/heads/develop/sort-rows-of-common-tables'
To my_git_repo.git
! [remote rejected] develop/sort-rows-of-common-tables -> develop/sort-rows-of-common-tables (failed to update ref)
error: failed to push some refs to 'my_git_repo.git'
看起来我在本地遇到了同样的错误,所以我敢打赌,为了在远程修复它,我必须 运行 一个类似于我 运行 的命令before (git update-ref -d refs/heads/develop
) 以远程引用为目标。
是否正确?如果是,我该如何更新远程引用?
我已搜索 git documentation 相关问题,但没有成功。
It looks like I get the same error I was getting on local,
是的,完全正确。
so I bet that in order to fix it on remote I have to run a command similar to the one I run before (git update-ref -d refs/heads/develop) which targets the remote refs.
差不多。您不能 运行 在远程端完全执行此命令。但是您可以通过推送删除远程分支:
git push origin :develop
或
git push origin --delete develop
已解决
我遇到的问题不是技术问题,而是 logical/practical 问题:
如果您在一个分支上工作,在这种情况下 develop
,包含对您的原样/“标准”代码的一些更改(假设原样代码位于 master
分支)开发名为 develop/added-something
、develop/added-something else
等的其他分支是没有意义的,因为那样的话 develop 中的更改将没有任何描述它们的“规范”(类似于 /specification-of-the-changes
)。
这被 git 正确地禁止了,即,有一个现有的分支 changes
,不允许有像 changes/specification
.
Not functional (and forbidden by git):
develop/added-element1
develop/added-element2
develop/added-element3
develop
# so what characterize this branch?
相反,应该有一个存放 AS IS 代码的存储库(比方说 master
),然后是许多分支,存放正在进行更改的代码,并且这些分支应遵循类似 develop/added-something
, develop/added-something-else
, 其中在分支名称中清楚地恢复了表征它们的特征。
Functional (and allowed by git):
develop/added-element1
develop/added-element2
develop/added-element3