我正在使用git bash for Windows:
$ git version
git version 1.8.0.msysgit.0
一切都运行良好好几个月了,我已经逐渐习惯了git是如何工作的,然后突然间,git pull正在检索每次我尝试拉动时的一些“新”分支:
me@MYPC /d/Projects/MyProject (master)
$ git pull
From github.com:ClientUsername/RepoName
* [new branch] branch1 -> origin/branch1
* [new branch] branch2 -> origin/branch2
Already up-to-date.
me@MYPC /d/Projects/MyProject (master)
$ git pull
From github.com:ClientUsername/RepoName
* [new branch] branch1 -> origin/branch1
* [new branch] branch2 -> origin/branch2
Already up-to-date.
我是否错误地配置了某些内容?这是正常行为吗?
修改
在一些有用的评论之后,我从.git \ refs \ remotes \ origin中删除了分支文件。我试图再次拉动并获得以下内容:
me@MyPC /d/Projects/MyProject (master)
$ git pull
From github.com:ClientUsername/RepoName
* [new branch] Branch1 -> origin/Branch1
* [new branch] Branch2 -> origin/Branch2
* [new branch] branch1 -> origin/branch1
* [new branch] branch2 -> origin/branch2
Already up-to-date.
me@MyPC /d/Projects/MyProject (master)
$ git pull
From github.com:ClientUsername/RepoName
* [new branch] Branch1 -> origin/Branch1
* [new branch] Branch2 -> origin/Branch2
Already up-to-date.
唯一的区别是分支名称的情况?
答案 0 :(得分:12)
就我而言,问题与两个具有相同名称的分支(一个大写,一个小写)有关。一旦我从远程原点删除了“重复”分支,我运行了以下内容:
git fetch --prune origin
每次拉动后,和[新分支]消息停止显示。有关prune的文档,请参阅参考资料。
答案 1 :(得分:10)
我可以通过在.git / packed_refs中列出 分支并将其文件重命名为.git / refs / remotes / origin到相同但不同的情况来重现行为。 (在NTFS文件系统上)。它通过重命名来治愈。
猜猜你是否可以重命名为与远程名称匹配的表单,这将是一个修复程序。
更多思考,并在编辑后使用第一个表单:
你必须有两个名字相似的分支,只是在远程的情况下不同!
问题是因为他们想要创建相同的文件。您必须通过重命名其中一个类似命名的分支来修复它。
答案 2 :(得分:6)
正如你在这里看到的那样:
* [new branch] Branch1 -> origin/Branch1
* [new branch] Branch2 -> origin/Branch2
* [new branch] branch1 -> origin/branch1
* [new branch] branch2 -> origin/branch2
您有4个分支,并且它们的对具有相同的名称,具有不同的大写/小写。这不能在Windows上镜像,因为分支存储为文件,并且您在同一文件夹中不能有两个文件Branch1
和branch1
。
要解决此问题,请在git push origin :Branch1
上运行Branch2
并删除其中一项。
答案 3 :(得分:3)
出现类似问题时,问题是由于区分大小写的差异,现有的本地文件夹与远程服务器中的名称不匹配。 对我有用的是
.git/refs/remotes/origin
您可以在其中找到受影响的分支机构文件夹名称,并将其重命名为*[new branch]
行中建议的名称或将其删除并再次pull
,pull
将重新创建正确的文件系统案例中的文件夹。
虽然从你上次编辑看起来在远程服务器中你有两个文件夹(即Branch1
和branch1
)所以我会仔细检查哪一个是正确的文件夹并删除远程错误的文件夹,然后确保文件夹名称与本地文件夹名称匹配。
答案 4 :(得分:1)
我也在Windows上运行git(2.20.0.windows.1版),遇到了同样的问题,但是设法在此线程的其他答案的帮助下解决了这个问题。
在我的情况下,团队成员在新路径下添加了一个新分支,该路径因情况而异(与现有分支不同)。
存在以下分支:
feature/branch-1
feature/branch-2
然后创建了一个新分支:
Feature/branch-3
请注意,所有分支都有唯一的名称;但是单词feature
的大小写有所不同。
在git pull
上,我收到了有关新分支的通知;从而为branch-3
下的.git\refs\remotes\origin\feature
文件创建了文件。分支创建的顺序可能在这里很重要。因为.git\refs\remotes\origin\feature
在.git\refs\remotes\origin\Feature
之前存在;我的路是小写的。颠倒分支创建的顺序可能会导致使用大写Feature
路径。
随后的每个git pull
都将报告此新分支。
问题在于,即使分支的文件存在;分支未添加到.git\packed-refs
。解决方法是为问题分支用正确的大小写手动添加行:
# pack-refs with: peeled fully-peeled sorted
...
<hash> refs/remotes/origin/feature/branch-1
<hash> refs/remotes/origin/feature/branch-2
<hash> refs/remotes/origin/Feature/branch-3
...
从<hash>
文件中提取.git\refs\remotes\origin\feature\branch-3
的地方。
也;推测原始问题。假设我有以下分支:
feature/branch-1
feature/Branch-1
Windows会将两个分支的哈希写入单个路径.git\refs\remotes\origin\feature\branch-1
(或大写B,取决于分支创建顺序)。我不知道如果您尝试git checkout
两个分支都意味着什么。
我还押注.git\packed-refs
中两个分支都只有一个条目。也许为两个分支添加条目将有助于摆脱git pull
报告的新分支消息,但是如上所述,git checkout feature/branch-1
后跟git checkout feature/Branch-1
可能很有趣。
希望这对其他人有用!
答案 5 :(得分:0)
(感谢Paul,与Paul不同,我在Windows的Cygwin上本地运行git。git remote是Linux服务器。)
每次执行git pull时,我都会通过git建议有关“ someBranchName”而不断收到此错误:
$ git pull
From <server>:<path>
* [new branch] someBranchName -> origin/someBranchName
Already up to date
有两个分支,但大小写不同:
$ git branch -a | grep -i SomeBranchName
remotes/origin/someBranchName
remotes/origin/SomeBranchName
对我有用的是编辑.git/refs/remotes/origin/someBranchName
(此文件存在于本地存储库中)并获取其哈希值。然后编辑.git/packed-refs
并为两个分支添加另一个具有相同哈希值的条目:
012345ae refs/remotes/origin/someBranchName
012345ae refs/remotes/origin/SomeBranchName
答案 6 :(得分:-1)
对我有用的只是:
rm .git/index
git reset