35

我正在为 Windows 使用 git bash:

$ 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.

唯一的区别是分支名称的情况?

4

7 回答 7

29

就我而言,问题与两个具有相同名称的分支(一个大写,一个小写)有关。从远程源删除“重复”分支后,我运行以下命令:

git fetch --prune origin

并且 [new branch] 消息在每次拉取后停止显示。有关prune的文档,请参阅参考资料。

于 2018-04-30T18:47:59.507 回答
10

我可以通过在 .git/packed_refs 中未列出一个分支并将其在 .git/refs/remotes/origin 中的文件重命名为相同但不同的大小写来重现该行为。(在 NTFS 文件系统上)。并且通过重命名来治愈它。

猜猜您是否可以重命名为与远程名称匹配的表单,这对您来说是一个修复。

多想,并使用编辑后的第一种形式:

您必须有两个名称相似的分支,只是在远程的情况下有所不同!

问题是因为他们想要创建相同的文件。您必须通过重命名类似名称的分支之一来修复它。

于 2013-07-02T12:58:31.013 回答
8

正如你在这里看到的:

* [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和相同的 for删除其中之一Branch2

于 2013-07-02T15:09:22.133 回答
8

有一个类似的问题,问题是由于区分大小写的差异,现有的本地文件夹与远程服务器中的名称不匹配。对我有用的是

.git/refs/remotes/origin

您可以在其中找到受影响的分支文件夹名称,并将其重命名为该*[new branch]行中建议的名称或删除它,然后pull再次pull以正确的文件系统案例重新创建该文件夹。

尽管从您上次的编辑来看,您在远程服务器中似乎有两个文件夹(即Branch1branch1),所以我会仔细检查哪个是正确的文件夹并删除远程错误的文件夹,然后确保文件夹名称与您的文件夹名称匹配当地的。

于 2017-03-14T22:44:52.967 回答
3

我也在为 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可能会很有趣。

希望这对其他人有用!

于 2019-10-10T05:42:32.130 回答
1

(感谢上面的 Paul。与 Paul 不同,我在 Windows 上的 Cygwin 上本地运行 git。git 远程是一个 Linux 服务器。)

每次我执行 git pull 时,我都会收到有关 'someBranchName' 的 git 建议的错误:

$ 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
于 2019-12-11T07:32:55.530 回答
0

对我有用的只是:

rm .git/index
git reset
于 2017-11-23T09:31:31.763 回答