每当我去取东西时,我都会收到Git的通知,上面说它已经收到了一个强制更新,并且它说一个分支是新的。每次取货都会这样做。我想知道为什么会发生这种情况,以及如何防止它发生(意思是修复它)。我试过rm .git/refs/remotes/MWNG,但没有效果。
$ git fetch MWNG
From github.com:MWNG/multikanal.epi7.mysite
+ 022873b...ecaa5df Feature/2005-registrering-sunnhetsbonus -> MWNG/Feature/2005-registrering-sunnhetsbonus (forced update)
* [new branch] feature/2005-registrering-sunnhetsbonus -> MWNG/feature/2005-registrering-sunnhetsbonus
* [new branch] feature/azure-rest-api -> MWNG/feature/azure-rest-api
$ git fetch MWNG
From github.com:MWNG/multikanal.epi7.mysite
+ 022873b...ecaa5df Feature/2005-registrering-sunnhetsbonus -> MWNG/Feature/2005-registrering-sunnhetsbonus (forced update)
* [new branch] feature/2005-registrering-sunnhetsbonus -> MWNG/feature/2005-registrering-sunnhetsbonus
* [new branch] feature/azure-rest-api -> MWNG/feature/azure-rest-api从上面的输出可以看出,可能有两个问题,但相关的问题。一个分支有一个强制的推送更新,而另一个没有,而这两个分支每次都应该是新的分支。
发布于 2016-09-20 00:07:09
作为acsrujan noted in a comment,这个问题与案例折叠有关。
这个问题可以归结为两部分:
这使得Git在这样的系统上感到困惑,恰恰是在通过文件名存储它们的时候:它们在那时变得对大小写敏感(至少通常是保持大小写的),尽管它们在其他地方是区分大小写的。现在Git不知道是一个分支,还是两个不同的分支。
Git最终可能需要一种通用机制来处理MacOS HFS+和HFS+文件系统上的其他问题,这些问题默认设置为保持大小写但不敏感的模式(包括Linux在内的其他OSes也可以这样做,但在默认情况下不能这样做)。在此之前,您处理这个问题的最简单的方法--或者说是最简单的方法--就是使用或借用一个区分大小写的系统(例如Linux机器),以所有常见的方式处理冲突分支,并将它们从那里更新到服务器。
如果这是不可用的,那么在不区分大小写的(Mac或Windows)客户端上有一种相对简单的方法来解决这个特定的问题。请注意,我还没有测试过这个。如果您只需要丢弃一个碰撞的分支名称(请参阅最后一段),它也可以简化得更多。
git fetch <remotename>,例如,git fetch MWNG。这将带来所有分支,并将它们的信息放到.git/FETCH_HEAD中(因为它是文件数据),后者将记录所有引用及其ID。Feature/2005-registrering-sunnhetsbonus (小写f,我们指责乔,不管他是谁)代替他。从FETCH_HEAD中查找散列ID,小心地获得正确的大小写混合。如果您有一个像awk这样的工具,您可以这样做:
$4 "'\''Feature/2005-registrering-sunnhetsbonus'\''“(打印$1 })<\..git/ == _HEAD
但是,只查看文件(使用less或more或您最喜欢的编辑器)可能是最简单的。git push创建一个新的、命名更好的分支,指向同一个ID (在本例中,该ID将以022873b开头):
git推MWNG 022873b...:refs/heads/feature/joe-used-a-bad-name
(注意:如果SHA-1 ID是唯一的,您可以使用它。如果没有,粘贴到确切的ID中,这肯定会起作用。)git push删除坏名称:
git push MWNG :Feature/2005-注册-Sunnhets红利
(或者git push --delete MWNG Feature/2005-registrering-sunnhetsbonus,这是一种更长但更值得纪念的方式来做同样的事情)。只要您避免使用--delete标志,就可以将其与步骤3结合起来:一个git push具有ID和新名称以及空字符串和旧名称。git fetch --prune MWNG,用新名称更新自己的存储库。如果您不需要保留名称的一个版本,这就容易得多了:只需对“坏”名称执行删除推送,再加上最后的fetch-with-prune-选项,以避免混淆您自己的Git。
https://stackoverflow.com/questions/39578431
复制相似问题