如何丢弃工作副本中未包含在索引中的更改?
#1楼
这会签出当前目录的当前索引,从而丢弃文件从当前目录向下的所有更改。
git checkout .
或此操作从索引中检出所有文件,覆盖工作树文件。
git checkout-index -a -f
#2楼
删除比git clean -df更具体的新文件的另一种方法(它将允许您删除某些文件(不一定是全部文件)),是先将新文件添加到索引,然后隐藏,然后删除藏。
当由于某种原因您无法通过某种常规机制(如rm)轻松删除所有未跟踪的文件时,此技术很有用。
#3楼
我真的发现这篇文章有助于解释何时使用什么命令: http : //www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/
有几种不同的情况:
如果尚未暂存文件,则可以使用
git checkout
。 签出“更新工作树中的文件以匹配索引中的版本”。 如果文件尚未暂存(又添加到索引),则此命令实质上会将文件还原为您的最后一次提交。git checkout -- foo.txt
如果已暂存文件,则使用git reset。 重置会更改索引以匹配提交。
git reset -- foo.txt
我怀疑使用git stash
是一种流行的选择,因为它的危险性要小一些。 如果您在使用git reset时不小心吹了太多东西,可以随时返回到它。 默认情况下,重置是递归的。
请参阅上面的文章以获取更多建议。
#4楼
似乎完整的解决方案是:
git clean -df
git checkout -- .
git clean
删除所有未跟踪的文件( 警告 :虽然它不会删除.gitignore中直接提到的被忽略文件, 但可能会删除驻留在文件夹中的被忽略文件 ),并且git checkout
清除所有未暂存的更改。
#5楼
当您要将存储转移给其他人时:
# add files
git add .
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff
[编辑]如所评论,可以命名藏匿处。 好吧,如果您想共享存储空间,请使用它;)
#6楼
即使在以下目录中也可以使用: 超出正常的git权限。
sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx
最近发生在我身上
#7楼
如果您使用的是存储库的派生库,并且在其中定期与另一个存储库定期进行同步(例如,拉取请求),那么以下内容实际上只是一个解决方案。 简短的答案:删除fork和refork,但请阅读github上的警告 。
我有一个类似的问题,可能不相同,我伤心地说我的解决方案并不理想,但它最终是有效的。
我经常会收到这样的git状态消息(涉及至少2/4个文件):