如何在我的工作副本中排除非指数的变更?


当前回答

当你想将一个字符转移到另一个人时:

# 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

[编辑] 如评论,可以命名 stashes. 好吧,如果你想分享你的 stash ;)

其他回答

只用:

git stash -u

是的,容易。

如果你真的很关心你的<unk>子,那么你可以跟随吉特<unk>子下降,但在那个时候你更好地使用(从Mariusz Nowak):

git checkout -- .
git clean -df

然而,我喜欢 git stash -u 最好的,因为它“排除”所有跟踪和未跟踪的变化在一个命令。 但是 git checkout -. 只排除跟踪的变化, git clean -df 只排除未跟踪的变化... 并输入两个命令是太多的工作:)

作为一个提醒,更新的版本的 git 有恢复命令,这也是一个建议,当你在更改文件时输入 git 状态时:

(使用“吉特添加......”更新什么将被承诺)

(使用“git restore...”来删除工作目录的更改)

所以 git'restore' 是这个问题的现代解决方案. 在输入 'git status' 后,从 git 阅读建议总是很好的想法 :-)

对于当前工作目录使用中的所有未输入的文件:

git restore .

对于特定文件的使用:

git restore path/to/file/to/revert

这与 git 交换器一起取代了过度加载的 git 支票(见这里),从而取消了论点的分歧。

如果一个文件既有步骤和未步骤的变化,则仅在 git diff 中显示的未步骤的变化将被转换。

之前 Git 2.23

对于当前工作目录中的所有未输入的文件:

git checkout -- .

对于一个特定的文件:

git checkout -- path/to/file/to/revert

在这里消除双重性(这被称为论点不双重性)。

我最喜欢的是

git checkout -p

这使你能够选择性地逆转碎片。

也看:

git add -p

无论你的 repo 是什么状态,你总是可以重新设置到任何以前的承诺:

git reset --hard <commit hash>

这将消除随后发生的所有变化。