从远程git存储库克隆后(在更好的代码中) 我提出了一些改变 并试图推动:
git push origin master
错误:
错误:无法锁定现有信息/参考号 致命:git-http-push失败
此案例涉及已存在的存储库。
我以前做过的是:
git config –global http.sslVerify false
git init
git remote add [url]
git clone
git commit
在“更好的代码”中,我无法访问git log。
我正在使用Windows。 详细错误是:
C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed
我之前克隆过,然后更改了代码并提交了。
答案 0 :(得分:355)
答案 1 :(得分:347)
对我来说这很有效:
git remote prune origin
由于这个答案似乎对很多人有所帮助,我挖了一下这里实际发生的事情。这样做是删除文件夹.git/refs/remotes/origin
中对远程分支的引用。因此,这不会影响您的本地分支,也不会更改远程任何内容,但它会更新您对远程分支的本地引用。在某些情况下,这些引用似乎包含Git无法正确处理的数据。
答案 2 :(得分:174)
当我的git remote(bitbucket.org)更改了他们的IP地址时,发生了这种情况。快速解决方法是删除并重新添加遥控器,然后一切按预期工作。如果您不熟悉如何在git中删除和重新添加远程,请执行以下步骤:
复制现有遥控器的SSH git URL。您可以使用以下命令将其打印到终端:
git remote -v
会打印出类似这样的内容:
origin git@server-address.org:account-name/repo-name.git (fetch)
origin git@server-address.org:account-name/repo-name.git (push)
从本地git repo中删除遥控器:
git remote rm origin
将遥控器添加回本地仓库:
git remote add origin git@server-address.org:account-name/repo-name.git
答案 3 :(得分:26)
这是我摆脱所有锁定引用问题的方法:
git gc --prune=now
git remote prune origin
这也许也是您要做的。
答案 4 :(得分:22)
对我有用的是:
.git/logs/refs/remotes/origin/branch
.git/refs/remotes/origin/branch
git gc --prune=now
答案 5 :(得分:18)
我通过执行以下操作来修复此问题
git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull
这假设您的本地和远程分支已对齐,并且您只是将refs错误视为非致命错误。
答案 6 :(得分:15)
运行命令git update-ref -d refs/heads/origin/branch
对其进行了修复。
答案 7 :(得分:12)
在拉动之前,您需要清理本地更改。以下命令可以帮助我解决。
git remote prune origin
然后
git pull origin develop
希望这会有所帮助!
答案 8 :(得分:10)
这可能现在已经解决了。但这对我有用。
位置:
如果锁定的存储库位于服务器端:
如果锁定的存储库仅限本地:
运行此命令:
git update-server-info
如果必须,修复(远程或/和本地)存储库的权限。在我的情况下,我必须chmod
到777
和chown
到apache:apache
尝试再次从本地存储库中推送:
git push
答案 9 :(得分:7)
我有这个问题因为我在一个与上游分支有类似名称的分支上。即上游分支称为example-branch
,我的本地分支称为example-branch/backend
。解决方案是改变我的本地分支的名称,如下所示:
git branch -m <new name goes here>
答案 10 :(得分:6)
这就是我的工作方式。
更快的选择:
cat /dev/null > /var/lock/apache2/DAVlock
答案 11 :(得分:4)
这听起来像是权限问题 - 您是否可能打开两个窗口,执行单独的权限?也许检查.git文件夹的所有权。
也许检查是否有未完成的文件锁打开,可能使用lsof进行检查,或者等效于您的操作系统。
答案 12 :(得分:2)
在我的例子中,一个分支被移动到一个子目录,该目录被称为分支。 Git对此感到困惑。当我删除本地分支时(在SourceTree中只需右键单击删除)一切正常。
答案 13 :(得分:2)
在我收到此消息后,我执行了 checkout 命令,并收到了以下消息:
Your branch is based on 'origin/myBranch', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
运行此命令后,我恢复了正常。
答案 14 :(得分:2)
在git fetch --all
之前运行git pull
。那应该可以解决问题。
答案 15 :(得分:1)
我有同样的错误消息,根本原因是历史的重写(分支重命名)。
这对我有用:
git remote prune origin
答案 16 :(得分:1)
当我尝试创建一个包含旧分支名称的新功能分支时,我遇到了这个问题,例如起源-branch1,我想创建branch1-feature。 不是可能的,但是branch1 / feature已经存在。
答案 17 :(得分:1)
就我而言,我必须手动删除已在远程上删除的旧标签。
答案 18 :(得分:1)
更新
您可能需要编辑〜/ .netrc文件:
原始答案:
你为什么禁用ssl?我认为这可能与您无法通过https推送有关。我把它放回去并尝试再次推动:
git config –global http.sslVerify true
答案 19 :(得分:0)
我遇到了一个典型的Mac相关问题,无法通过其他建议的答案解决。
Mac的默认文件系统设置是不区分大小写。
就我而言,一位同事显然忘了为分支创建大写字母,即
testBranch / ID-1 与 testbranch / UD-2
对于Mac文件系统(是的,可以进行不同的配置),这两个分支是相同的,在这种情况下,您只会得到两个文件夹之一。对于剩下的文件夹,您会得到一个错误。
就我而言,由于相关分支已经合并回去,因此删除.git / logs / ref / remotes / origin中有问题的子文件夹即可解决此问题。
答案 20 :(得分:0)
对我来说,当我尝试使用这样的名称创建一个新分支时发生了这种情况:
master/pre-upgrade
将其更改为另一个名称,例如:
pre-upgrade/master
成功了!
答案 21 :(得分:0)
对于我来说,它与我已经创建的分支名称有关。
首先,我确实创建了一个分支,该分支的某些名称肯定不存在,例如:
git checkout -b some_unknown_branch
然后我清除了所有其他分支,因为它们只是不必要的垃圾。
git branch | grep -v \* | grep -v master | xargs git branch -D
,然后将我的分支重命名为我想要的名称,例如:
git checkout -m my_desired_branch_name
答案 22 :(得分:0)
此错误正在发生
git fetch
但就我而言,我只想更新主分支,可以使用
git fetch origin main
不是锁定引用问题的解决方案,但它帮助我避免了这个问题:P
答案 23 :(得分:0)
如果您幸运地没有本地工作要提交/推送并且有时间喝咖啡,您可以简单地删除存储库的本地副本并重新克隆
答案 24 :(得分:0)
除了已经为该问题提供的许多答案之外,对您的计算机中存在的本地repo分支和远程中不存在的本地repo分支进行简单检查也将有所帮助。在这种情况下,您不使用
git prune
许多建议的命令。
只需删除本地分支
<div id="snippet">Hello</div>
如附件屏幕快照中所示,当您确定本地分支没有跟踪远程分支时,使用-D强制删除。
答案 25 :(得分:0)
当尝试运行git filter-branch
以便将许多子目录分离到一个新的单独的存储库中时(如this answer),我看到了此错误。
我尝试了所有上述解决方案,但没有一个起作用。最终,我决定不需要在新分支中保留所有非常糟糕的标签,只需运行:
git remote remove origin
git tag | xargs git tag -d
git gc --prune=now
git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- apps/AAA/ libs/xxx' --prune-empty -- --all
答案 26 :(得分:0)
对于bettercodes.org,解决方案更具诗意 - 唯一的问题可能是分配给项目成员的权利。简单的会员没有写权利!请确保您拥有版主或管理员权限。当然,这需要由管理员在项目设置的bettercodes.org中设置。
答案 27 :(得分:0)
检查您(实际上是git进程)是否可以访问文件.git/info/refs
,并且此文件未被其他进程锁定。
答案 28 :(得分:-1)
对我来说,删除.git/info/ref
一事无成。当git不运行时,不应有ref
文件。但就我而言,无论出于什么原因,都有一个导致问题。
删除文件不会删除您的任何本地提交或分支。