Git分支在拉取时不断重新创建

10

我有一个git分支,每次执行'git pull'时它都会以交替的字母大小写“重新创建”。假设分支名称为'a'(或'A'),一次'git pull'将产生以下行:

* [new branch]      a       -> origin/a

接下来的 'git pull' 将会产生:

* [new branch]      A       -> origin/A

这个问题一直存在。我不知道该分支是如何创建的(或者它的用途是什么),因为这是其他人创建的。

我应该如何控制这个分支,让它停止这种情况的发生?


1
这个分支(或者分支们?)在 git ls-remote origin 的输出中显示吗? - Cascabel
你似乎遇到了问题。在这个列表中确实有两个分支出现了,一个是refs/head/a,另一个是refs/head/A。我猜这意味着有人在创建这两个分支时没有注意到大小写不同,对吗? - acoward
3个回答

7

如评论中所述,远程仓库中存在refs/heads/Arefs/heads/a两个分支。这意味着那里确实存在两个不同的分支。(Git本身是区分大小写的,大多数非Windows文件系统也是如此。)

然而,如果您使用的是Windows系统,那么这个问题可能就可以解释了。每个引用都被创建为单独的文件。 Git在远程上看到两个引用,但当它尝试在本地更新时,只有一个存在,因此另一个始终会被创建。两个操作的内部顺序必须是这样的,即新创建的一个覆盖另一个,从而导致交替更替。

如果这些引用指向相同的提交,则解决方法是在远程上删除其中一个:

git push origin :refs/heads/A

这种情况在Mac OS X上也可能发生(我已经复制了它),在那里也有一个解决方法(如果其中一个分支不能只被删除/重命名):使用Disk Utility创建一个带有“Mac OS Extended(区分大小写,日志记录)”文件系统的磁盘映像(文件 > 新建 > 空白磁盘映像…),并在克隆区分大小写的存储库之前cd到新卷。 - Chris Johnsen

1

看起来 origin/a 和 origin/A 在本地被删除了,因为你每次都会得到 [new branch]。如果有人或某些东西正在删除这些引用,那么每次从远程获取(或拉取)时都会得到这些分支。你尝试过重新克隆存储库吗?你是唯一遇到这个问题的人吗?


我不是唯一一个遇到这个问题的人。我第一次遇到这个问题是因为团队中其他人也有此问题,并认为重新克隆可以解决问题。我不确定他们是否尝试重新克隆并解决了问题。现在我也遇到了同样的问题。我不认为本地正在发生删除操作,因为即使本地库什么都没有发生,每次都会出现这种情况。我可以连续执行“git pull”命令,但每次仍然会出现此问题。 - acoward
当您执行pull操作时,是否有任何git钩子触发? - ralphtheninja
我是Git的新手。我猜想,既然我不知道如何让Git钩子启动,那么我就没有它们,对吗? - acoward

1

我刚遇到了这个问题。在我的情况下,其中一个分支名称是直接从另一个分支派生的,因此我从远程删除了旧分支,因为它没有添加任何价值。假设要删除的分支是“a”,那么这个命令将从远程(名为“origin”)中删除它:

git push origin :a

几次获取操作,问题就解决了(直到有人再次推送它...)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接