我以前可以通过执行“丢弃”功能来撤消SourceTree中的更改,该功能在幕后会产生以下命令:
git -c diff.mnemonicprefix=false -c core.quotepath=false reset -q HEAD -- myproj.csproj
git -c diff.mnemonicprefix=false -c core.quotepath=false checkout HEAD -- myproj.csproj
突然,这不起作用。我执行了“丢弃”操作,没有错误,请重新冻结视图,但是文件仍被“修改”。然后,我尝试在命令行中执行以下相同结果:
c:\myproject> git reset HEAD
Unstaged changes after reset:
M myproj.csproj
为什么仍将其列为未分阶段的更改?
我已验证文件确实可写(没有进程持有锁)
更新
git checkout
也不起作用:
C:\myproject>git checkout myproj.csproj
C:\myproject>git status
# On branch master
# 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: myproj.csproj
#
no changes added to commit (use "git add" and/or "git commit -a")
更新2还尝试了:
git checkout --
git checkout -- .
git checkout HEAD
,没有一个解决我的问题
更新3-更近一步:
事实证明,当我执行签出操作时,.csproj确实已还原为正确的版本,但是签出的版本使用了不同的换行编码。签入版本具有CR-LF(0D-0A)用于换行,而签出版本仅具有LF(0A)。因此,git认为文件在每一行上都是不同的。为什么这个?
更新4:添加了SourceTree发出的git-commands的第二行。我没有注意到第一次,这就是为什么我认为git reset HEAD
会做任何事情的原因。这并不会改变基本问题仍然与CR / LF相关的事实(我认为)
摘要我从未找到解决该问题的方法,但是我通过检入文件来“解决”它。我最初的问题没有包含SourceTree确实发出了正确的命令以回滚我想要的信息的信息,因此这里的大多数答案都解决了该问题。在真正的问题是,目前还不清楚,但我的主要理论是,这是CR / LF有关。
如果需要删除本地更改,请运行以下命令
git checkout -- file_name
git reset HEAD
不会删除本地更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句