混帐后留下的未分级的变化的复位 - 硬(Unstaged changes left after gi

2019-06-14 17:22发布

标题说明了一切。

之后git reset --hardgit status给我的文件中Changes not staged for commit:部分。

我也尝试git reset .git checkout -- .git checkout-index -f -a ,都无济于事。

那么,如何才能摆脱这些不分级的变化?

这似乎只命中了Visual Studio项目文件。 奇怪的。 看到这个贴: http://pastebin.com/eFZwPn9Z 。 什么是特殊与这些文件,是在.gitattributes我有:

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

此外, autocrlf设置为false,在我的世界.gitconfig 。 莫非是莫名其妙相关?

Answer 1:

我有同样的问题,这是关系到.gitattributes文件。 但是导致该问题的文件类型中未指定.gitattributes

我可以简单地运行来解决问题

git rm .gitattributes
git add -A
git reset --hard


Answer 2:

Git会不会重置不在库文件。 所以你可以:

$ git add .
$ git reset --hard

这将启用所有的变化,这将导致的Git要知道这些文件,然后重新设置。

如果这不起作用,你可以尝试藏匿和删除您的更改:

$ git stash
$ git stash drop


Answer 3:

解决!!!

我已经解决了使用以下STPES这个问题

1)从Git的索引的每一个文件。

git rm --cached -r .

2)重写Git的索引拿起所有的新生产线的结局。

git reset --hard

溶液的步骤的一部分上git的网站描述https://help.github.com/articles/dealing-with-line-endings/



Answer 4:

如果您使用的Git的Windows,这很可能是你的问题

我有同样的问题,藏匿,硬复位,干净,甚至所有的人仍然留变化背后。 什么原来是这个问题是不是由git的正确设置x文件模式。 这是一个“已知的问题”用git的窗户。 当地的变化显示为旧模式100755新模式100644 gitk和git的状态,没有任何实际的文件差异。

解决方法是忽略文件方式:

git config core.filemode false

更多资讯



Answer 5:

好吧,我有种解决了这个问题。

这似乎是, .gitattributes文件,其中包含:

*.sln        eol=crlf
*.vcproj     eol=crlf
*.vcxproj*   eol=crlf

国产项目文件出现不分级。 我无言以对这是为什么,我真的希望有人枢密院混帐的方式会给我们一个很好的解释。

我的修复是删除这些文件,并添加autocrlf = false[core].git/config

这并不等于完全同样的事情以前的配置,因为它要求每个开发有autocrlf = false 。 我想找到一个更好的修复。

编辑:

我评论的罪证行,注释去掉,他们和它的工作。 什么......我甚至不...!



Answer 6:

可能的原因#1 - 行结束规范化

当所讨论的文件被检入到存储库,而不对行结束导致与任一不正确的行尾,或混合的行尾的存储库中的文件的正确的配置(1),其中这可能发生的一种情况是。 为了确认,确认git diff仅显示行尾的变化(这可能不是默认可见,尝试git diff | cat -v看到回车如字面^M字符)。

随后,有人可能加入.gitattributes或修改的core.autocrlf设置正常化行结尾(2)。 基于该.gitattributes或全局配置,Git的已申请了适用结束请求正常化行到你的工作副本的本地修改。 不幸的是,由于某些原因git reset --hard不撤消这些行正常化的变化。

解决办法在当地行尾被重置不会解决问题。 每个文件被“看到”时间混帐,它会尝试重新正常化,导致同样的问题。

最好的办法是让git的应用它希望通过回购全部归行尾匹配正常化.gitattributes ,并承诺这些变化-看试图修复行结束用git过滤分支,但没有运气 。

如果你真的想尝试恢复手动那么最简单的解决方案似乎抹去了修改过的文件,然后告诉混帐,以恢复他们的更改文件,但我注意到这个解决方案似乎不工作的始终100%时间( 警告:如果你修改过的文件比行尾其他的变化运行这个!):

    git status --porcelain | grep "^ M" | cut -c4- | xargs rm
    git checkout -- .

需要注意的是,除非你在某个时刻正常化资源库中的行结尾,你会继续运行到这个问题。

可能原因#2 - 不区分大小写

第二个可能的原因是在Windows或Mac OS / X,不区分大小写。 例如,假设类似下面的路径在库中存在:

/foo/bar

现在有人对Linux的承诺文件到/foo/Bar (可能是由于构建工具或东西,创建目录)和推动。 在Linux上,这其实是现在两个单独的目录:

/foo/bar/fileA
/foo/Bar/fileA

检查此回购出在Windows或Mac可以产生改良fileA不能被复位,因为在每个复位,在Windows上GIT中检出/foo/bar/fileA ,然后因为Windows是不区分大小写,将覆盖的内容fileA/foo/Bar/fileA ,导致他们被“修改”。

另一种情况可以是一个独立的文件(多个)存在于回购,当其上的情况下不敏感的文件系统检出,将重叠。 例如:

/foo/bar/fileA
/foo/bar/filea

有可能是导致这一问题的其他类似的情况。

在不区分大小写的文件系统的git真的应该检测这种情况,并显示一个有用的警告信息,但它目前没有(这可能会在未来改变-看到这个讨论 ,并提出了相关的补丁git.git邮件列表)。

解决的办法是把文件的情况下,在git的指数,并在Windows系统内对齐的情况。 这既可以在Linux上,这将显示出事物的真实状态,或者在Windows上具有非常有用的开源工具来完成Git的凝聚 。 Git的凝聚将应用必要的情况下更改git的指数,然后可以承诺回购。

(1)这是最有可能使用Windows的人,没有任何.gitattributes定义为有问题的文件,并使用默认的全局设置core.autocrlf这是false (见(2))。

(2) http://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line/



Answer 7:

这里的另一个原因可能是不区分大小写的文件系统 。 如果你在同一水平上的名字只大小写不同的回购有多个文件夹,你会得到这个打击。 浏览使用它的网络接口(例如GitHub的或VSTS),以确保源代码库。

欲了解更多信息: https://stackoverflow.com/a/2016426/67824



Answer 8:

如果其他的答案不工作,尝试添加的文件,然后重新设置

$ git add -A
$ git reset --hard

在我的情况,这有助于当有空文件一大堆的混帐正在跟踪。



Answer 9:

命令:

# Remove all untracked files and directories. (`-f` is `force`, `-d` is `remove directories`)

git clean -fd


Answer 10:

检查.gitattributes

在我来说,我有*.js text eol=lf在它和git选项core.autocrlftrue

它带给我的情况时混帐autoconverts我的文件行结束,并阻止我来解决它,甚至git reset --hard HEAD didn`t做任何事情。

我与评论修复*.js text eol=lf.gitattributes和之后的注释去掉它。

看起来它只是魔术的git。



Answer 11:

你可以stash了你的变化,然后删除该藏匿处:

git stash
git stash drop


Answer 12:

这些方法都没有工作对我来说,唯一的解决办法是核弹整个回购和再克隆。 这包括积攒,复位,然后加入复位,CLRF设置,大小写等叹息..



Answer 13:

我打一个类似的问题还涉及.gitattributes ,但我的情况下参与GitHub的LFS。 虽然这不完全是OP的情况下,我认为它提供了一个机会来说明什么.gitattributes文件一样,为什么它会导致的“幻影”不同的形式不分级的变化。

在我的情况下,该文件已在我的仓库,因为刚开始的时候一样。 在最近的提交,我增加了一个新git-lfs track使用,这是在事后有点过于宽泛的模式,并结束了匹配这个古老的文件规则。 我知道,我不想改变这个文件; 我知道我没有改变的文件,但现在这是我不分阶段的变化,没有检出或在该文件上硬重置的量要修复它。 为什么?

GitHub的LFS扩建工程主要是通过利用该挂钩git通过提供接入通过.gitattributes文件。 一般来说,在条目.gitattributes指定匹配的文件应如何处理。 在OP的情况下,与正火行尾关注; 在矿山,它是是否让LFS处理文件存储。 在这两种情况下,实际文件git计算时看到git diff不在于你看,当你检查文件的文件相匹配。 因此,如果更改一个文件是如何通过处理.gitattributes与其匹配的模式,它会显示在状态报告未分级的变化,即使真的有在文件中没有变化。

所有的说,我的“答案”的问题是,如果在变化.gitattributes文件是你想要做的事,你应该真的应该只需要添加的变化,继续前进。 如果没有,那么修改.gitattributes以更好地代表在做你想要什么。

参考

  1. GitHub的LFS规范 -他们如何挂钩到大说明cleansmudge函数调用替换您的文件中的git与哈希一个简单的文本文件中的对象。

  2. gitattributes文档 -所有关于什么是可自定义如何的细节git处理您的文档。



Answer 14:

我有同样的问题。 我git reset --hard HEAD ,但还是每次我做了一次git status ,我看到一些文件进行修改。

我的解决办法相对简单。 我刚刚完成我的IDE(这是Xcode中),并关闭我的命令行(这里是终端上我的Mac OS),并试图再次和它的工作。

但我从来没有能够找到什么起源问题。



Answer 15:

我相信,有一个与GIT中的Windows的问题,即混帐随机写入结账错行结束,唯一的解决方法是签出一些其他的分支和力混帐忽略的变化。 然后结帐你真正想要的工作在树枝上。

git checkout master -f
git checkout <your branch>

请注意,这会舍弃你可能已经有意进行任何更改,所以只能这样做,如果你结账后立即有这个问题。

编辑:我可能实际上已经很幸运第一次。 事实证明,我切换分支后,再次得到位。 原来,该文件是git的报告改变枝条被改变后进行修改。 (显然是因为git的没有始终如一地应用到结尾的文件CRLF线正常。)

我更新到最新的Windows Git和希望的问题了。



Answer 16:

类似的问题,但我敢肯定,只在表面。 无论如何,它可以帮助别人:我做了什么(FWIW,在SourceTree):藏在未提交的文件,然后做了一个硬复位。



Answer 17:

至于其他的答案已经指出,这个问题是因为线端自动补正。 我遇到的* .SVG文件这个问题。 我用SVG文件在我的项目图标。

为了解决这个问题,让我知道的git通过添加下面一行的.gitattributes是SVG文件应为二进制而不是文本进行治疗

* .SVG二进制



Answer 18:

在类似的情况。 由于多年与众多程序员的折磨谁能够东西线两端的不同编码的结果(ASP,.js文件,...的CSS没有本质)成一个文件。 前段时间拒绝.gitattributes。 回购设置左autorclf = truesafecrlf = warn

从线的不同端归档同步时最后一个问题又出现了。 从存档复制后,在git的状态很多文件被更改用音符

The line will have its original line endings in your working directory. warning: LF will be replaced by CRLF in ...

从技巧如何在Git中正常化工作树行尾? 帮助

git add -u



Answer 19:

我遇到了另一种可能性是,在仓库中的软件包之一结束了与一个分离的头。 如果没有在这里的回答可以帮助你遇到这样的git的状态消息,你可能有同样的问题:

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   path/to/package (new commits)

进入的path/to/package文件夹git status应该得到以下结果:

HEAD detached at 7515f05

而下面的命令应该再解决这个问题,其中master应该由当地分行进行更换:

git checkout master

你会得到一个消息,您当地的分行将成为远程分支背后提交的一些数额。 git pull你应该走出困境!



文章来源: Unstaged changes left after git reset --hard
标签: git git-reset