如何丢弃Git中未老化的更改?
如何放弃工作副本中不在索引中的更改?对于当前工作目录中的所有未老化文件,请使用:如何丢弃Git中未老化的更改?,git,version-control,Git,Version Control,如何放弃工作副本中不在索引中的更改?对于当前工作目录中的所有未老化文件,请使用: git checkout -- . 对于特定的文件使用: git checkout -- path/to/file/to/revert --此处用于消除歧义(这称为) 对于Git2.23以后的版本,可能需要使用更具体的 git restore . 分别 与git开关一起替换重载的git checkout(),从而消除参数歧义。另一种更快的方法是: git stash save --keep-index --i
git checkout -- .
对于特定的文件使用:
git checkout -- path/to/file/to/revert
--
此处用于消除歧义(这称为)
对于Git2.23以后的版本,可能需要使用更具体的
git restore .
分别
与
git开关一起
替换重载的git checkout
(),从而消除参数歧义。另一种更快的方法是:
git stash save --keep-index --include-untracked
如果您不想彻底了解它,您不需要包括——包括未跟踪的
之后,如果愿意,您可以使用git stash drop
命令删除该存储。这将检查当前目录的当前索引,丢弃当前目录下的所有文件更改
git checkout .
或者从索引中检出所有文件,覆盖工作树文件
git checkout-index -a -f
如果您对保留未分级的更改不感兴趣(特别是如果分级的更改是新文件),我发现这很方便:
git diff | git apply --reverse
尝试了上述所有解决方案,但仍然无法删除新的未老化文件
使用git clean-f
删除这些新文件,但要小心!请注意强制选项
git clean -df
从当前目录开始,通过递归删除不受版本控制的文件来清理工作树
-d
:除了未跟踪的文件之外,还删除未跟踪的目录
-f
:强制(根据清洁.要求强制设置,可能不需要强制)
运行git help clean
查看手册另一种比git clean-df更具体的删除新文件的方法(它允许您删除一些文件,但不一定全部),就是先将新文件添加到索引中,然后隐藏,然后删除隐藏
当由于某种原因,您无法通过某种普通机制(如rm)轻松删除所有未跟踪的文件时,此技术非常有用。我发现本文有助于解释何时使用哪个命令:
有两种不同的情况:
如果尚未暂存文件,则使用git checkout
。签出“更新工作树中的文件以匹配索引中的版本”。如果文件尚未暂存(亦称添加到索引中)。。。此命令实质上将文件还原为上次提交的文件
git签出——foo.txt
如果已暂存文件,则使用git reset。重置更改索引以匹配提交
git重置--foo.txt
我怀疑使用git-stash
是一种流行的选择,因为它不太危险。如果在使用git reset时不小心吹走了太多,您可以随时返回到它。默认情况下,重置是递归的
查看上面的文章以获得进一步的建议。似乎完整的解决方案是:
git clean -df
git checkout -- .
删除所有未跟踪的文件(警告:虽然它不会删除.gitignore中直接提到的被忽略的文件,它可能会删除驻留在文件夹中的被忽略的文件),并且git checkout
清除所有未老化的更改。当您要将存储转移给其他人时:
# 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
[编辑]如评论所述,可以命名储藏。好吧,如果你想分享你的藏品,就用这个;) 即使在以下目录中也有效:;在正常git权限之外
sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx
最近发生在我身上的事如果您使用的是存储库的分支,在该分支中您定期与另一个repo进行同步(例如pull请求),那么下面的内容实际上只是一个解决方案。简短回答:删除fork并重新工作,但是阅读github上的警告
我有一个类似的问题,也许不完全相同,我很难过地说我的解决方案并不理想,但它最终是有效的
我经常会有这样的git状态消息(至少涉及2/4个文件):
$git状态
#目前不在任何分支上。
#要提交的更改:
#(使用“git重置磁头…”取消分级)
#
#修改:doc/PROJECT/MEDIUM/ATS约束/约束变量dats
#修改:doc/PROJECT/MEDIUM/ATS constraint/parsing/parsing_s2var.dats
#
#未为提交而暂存的更改:
#(使用“git add…”更新将提交的内容)
#(使用“git签出--…”放弃工作目录中的更改)
#
#修改:doc/PROJECT/MEDIUM/ATS约束/约束变量dats
#修改:doc/PROJECT/MEDIUM/ATS constraint/parsing/parsing_s2Var.dats
敏锐的眼睛会注意到这些文件中有一个doppleganger,在case off中只有一个字母。不知怎的,我不知道是什么让我走上了这条路(因为我自己没有从上游回购协议处理这些文件),我已经切换了这些文件。尝试本页(和其他页)列出的许多解决方案似乎没有帮助
我可以通过删除我的分叉存储库和所有本地存储库,然后重新工作来解决这个问题。单靠这一点是不够的;上游必须将有问题的文件重命名为新文件名。只要您没有任何未经限制的工作、没有Wiki,也没有与上游存储库产生分歧的问题,您就应该没事。至少可以说,上游可能对你不太满意。至于我的问题,这无疑是一个用户错误,因为我对git不太精通,但事实上,解决git的问题也很不容易 git签出-f
mangit结帐
:
-f,--force
切换分支时,即使索引或工作树与头不同,也要继续。这用于丢弃本地更改
从索引中检出路径时,不要在未合并条目时失败;相反,未合并的条目将被忽略。我最喜欢的是
cd path_to_project_folder # take you to your project folder/working directory
git checkout . # removes all unstaged changes in working directory
git checkout -p
那就让
cd path_to_project_folder # take you to your project folder/working directory
git checkout . # removes all unstaged changes in working directory
git checkout -p
git add -p
git stash
git stash apply
git add --all
git fetch --all
git reset --hard origin/branchname
git reset --hard @{u}
git add .
git stash
git stash drop
git reset --hard <commit hash>
git clean -dxn . # dry-run to inspect the list of files-to-be-removed
git clean -dxf . # REMOVE ignored/untracked files (in the current directory)
git checkout -- . # ERASE changes in tracked files (in the current directory)
git clean -df
git stash -u
git checkout -- .
git clean -df
git checkout -- .
git stash -u
discard = checkout --
discard .
discard filename
cleanout = !git clean -df && git checkout -- .
cleanout
git checkout -- .
git clean -i
git stash
git restore <file>
git restore .