rbe*_*amy 213 git revert working-copy git-status
我想删除对我的工作副本的所有更改.
运行git status
显示修改的文件.
我没做什么似乎删除了这些修改.
例如:
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout -- Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git checkout `git ls-files -m`
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git reset --hard HEAD
HEAD is now at 6c857e7 boo libraries updated to 2.0.9.2 and rhino.dsl.dll updated.
rbellamy@PROMETHEUS /d/Development/rhino-etl (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: Rhino.Etl.Core/Enumerables/CachingEnumerable.cs
# modified: Rhino.Etl.Core/Pipelines/SingleThreadedPipelineExecuter.cs
# modified: Rhino.Etl.Tests/Rhino.Etl.Tests.csproj
# modified: Rhino.Etl.Tests/SingleThreadedPipelineExecuterTest.cs
#
no changes added to commit (use "git add" and/or "git commit -a")
Run Code Online (Sandbox Code Playgroud)
Ria*_*son 204
我在Windows上遇到了这个问题但是我没有准备好调查使用的后果config --global core.autocrlf false
我也没准备好放弃我的藏品中的其他私人分支和好吃的东西,并从一个新的克隆开始.我只需要完成一些事情.现在.
这对我有用,因为你让git完全重写你的工作目录:
git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)
(请注意,在原始问题的评论中建议之前,运行只是git reset --hard
不够好,也没有明确rm
的文件reset
)
Ikk*_*kke 125
可能导致此行为的问题有多个:
行结束规范化
我也遇到过这类问题.它归结为git自动将crlf转换为lf.这通常是由单个文件中的混合行结尾引起的.该文件在索引中被规范化,但是当git再次对其进行非规范化以将其与工作树中的文件区分开来时,结果是不同的.
但是,如果要解决此问题,则应禁用core.autocrlf,将所有行结尾更改为lf,然后再次启用它.或者您可以通过执行以下操作完全禁用它:
git config --global core.autocrlf false
Run Code Online (Sandbox Code Playgroud)
您也可以考虑使用文件而不是core.autocrlf.gitattribute
.这样,您可以确保使用repo的每个人都使用相同的规范化规则,从而防止混合行结尾进入存储库.
还要考虑设置core.safecrlf来警告你是否希望git在执行不可逆的规范化时发出警告.
git 联机帮助说:
CRLF转换有可能破坏数据.autocrlf = true将在提交期间将CRLF转换为LF,在结账时将LF转换为CRLF.无法通过git重新创建在提交之前包含LF和CRLF混合的文件.对于文本文件,这是正确的做法:它校正行结尾,这样我们在存储库中只有LF行结尾.但对于意外归类为文本的二进制文件,转换可能会破坏数据.
不区分大小写的文件系统
在不区分大小写的文件系统上,当存储库中存在具有不同大小的相同文件名时,git会尝试检出两者,但只有一个文件系统最终结束.当git尝试比较第二个时,它会将它与错误的文件进行比较.
解决方案是切换到不区分大小写的文件系统,但在大多数情况下这是不可行的,或者重命名并在另一个文件系统上提交其中一个文件.
zeb*_*h49 98
另一个可能对人有用的解决方案,因为没有一个文本选项适合我:
.gitattributes
一行替换内容:* binary
.这告诉git将每个文件视为二进制文件,它无法执行任何操作.git checkout -- <files>
将它们恢复到存储库版本git checkout -- .gitattributes
将.gitattributes
文件恢复到其初始状态Mar*_*eal 69
对于遇到此问题的未来人员:更改文件模式也可能具有相同的症状. git config core.filemode false
会解决它.
Ric*_*tte 31
这让我很疯狂,特别是如果没有网上找到的任何解决方案,我无法解决这个问题.这是我如何解决它.不能拿这里的学分,因为这是同事的工作:)
问题的根源:我最初安装的git没有在Windows上进行自动换行.这导致我初始提交GLFW没有正确的行结束.
注意:这只是本地解决方案.克隆回购的下一个人仍然会遇到这个问题.可以在此处找到永久解决方案:https: //help.github.com/articles/dealing-with-line-endings/#re-normalizing-a-repository.
设置:Xubuntu 12.04 Git仓库与glfw项目
问题:无法重置glfw文件.无论我尝试什么,它们总是显示为经过修改.
解决了:
edit .gitattributes
Comment out the line: # text=auto
Save the file
restore .gitattributes: git checkout .gitattributes
Run Code Online (Sandbox Code Playgroud)
moo*_*moo 11
我有一个.bat文件有同样的问题(无法在未跟踪的文件中删除它).git checkout - 没有用,也没有在这个页面上的任何建议.唯一对我有用的是做:
git stash save --keep-index
Run Code Online (Sandbox Code Playgroud)
然后删除存储:
git stash drop
Run Code Online (Sandbox Code Playgroud)
小智 7
两次得到同样的问题!两次隐藏我做的一些改变,然后试图弹回它们.因为我有大量的文件被更改,所以无法弹出更改 - 但它们不是!它们完全一样.
我现在认为我已经尝试了上述所有解决方案而没有成功.试过后
git rm --cached -r .
git reset --hard
Run Code Online (Sandbox Code Playgroud)
我现在几乎修改了我的存储库中的所有文件.
在对文件进行差异化时,它说我删除了所有行,然后再次添加它们.
有点令人不安.我现在将避免将来藏匿..
唯一的解决方案是克隆一个新的存储库并重新开始.(最后一次)
通常情况下,在GIT清除所有的修改和新文件将下列命令应该工作非常漂亮(是小心,这将删除所有的新文件+您可以创建文件夹和将所有修改过的文件恢复到您的状态电流提交):
$ git clean --force -d
$ git checkout -- .
Run Code Online (Sandbox Code Playgroud)
也许有时更好的选择是使用可选消息执行“git stash push”,如下所示:
$ git stash push -m "not sure if i will need this later"
Run Code Online (Sandbox Code Playgroud)
这也将清除您所有的新文件和修改过的文件,但如果您想恢复它们,您将把它们全部藏起来。GIT 中的存储会从一个分支转移到另一个分支,因此您可以根据需要在不同的分支中恢复它们。
作为旁注,如果您已经暂存了一些新添加的文件并想要删除它们,这应该可以解决问题:
$ git reset --hard
Run Code Online (Sandbox Code Playgroud)
如果以上所有内容对您都不起作用,请阅读下面对我有用的内容:
我之前遇到过这个问题几次。我目前正在我雇主提供的 Windows 10 机器上进行开发。今天,这种特殊的 git 行为是由我从我的“开发”分支创建一个新分支引起的。出于某种原因,在我切换回“开发”分支后,一些看似随机的文件仍然存在,并在“git status”中显示为“已修改”。
此外,那时我无法签出另一个分支,所以我被困在我的“开发”分支上。
这就是我所做的:
$ git log
Run Code Online (Sandbox Code Playgroud)
我注意到我今天早些时候从“develop”创建的新分支显示在第一个“commit”消息中,在末尾引用“HEAD -> develop, origin/develop, origin/HEAD, The-branch-i-created -今天早些时候”。
由于我真的不需要它,我删除了它:
$ git branch -d The-branch-i-created-earlier-today
Run Code Online (Sandbox Code Playgroud)
更改后的文件仍然出现,所以我做了:
$ git stash
Run Code Online (Sandbox Code Playgroud)
这解决了我的问题:
$ git status
On branch develop
Your branch is up to date with 'origin/develop'.
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)
当然$ git stash list
会显示隐藏的更改,并且由于我很少并且不需要任何隐藏,因此我$ git stash clear
删除了所有隐藏。
注意:我还没有尝试过在我之前有人建议这样做:
$ git rm --cached -r .
$ git reset --hard
Run Code Online (Sandbox Code Playgroud)
这可能也有效,下次遇到这个问题时我一定会尝试。