为什么git会一直显示新的分支?

时间:2013-07-02 10:49:54

标签: git

我正在使用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.

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

7 个答案:

答案 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上镜像,因为分支存储为文件,并且您在同一文件夹中不能有两个文件Branch1branch1

要解决此问题,请在git push origin :Branch1上运行Branch2并删除其中一项。

答案 3 :(得分:3)

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

.git/refs/remotes/origin

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

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

答案 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