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


当前回答

2019年更新

您现在可以在一个跟踪文件中删除未完成的更改,使用:

git restore <file>

在当前目录中的所有跟踪文件中(重复)与:

git restore .

如果您将后者从存储库的根中运行,则将删除项目中的所有跟踪文件中的未进行的更改。

笔记

git restore 于 2019 年 7 月推出,并在 2.23 版本中发布,作为 git checkout 命令分成 git restore 文件和 git switch 分支的部分。 git checkout 仍然按照它所使用的方式行事,而旧的答案仍然是完美的。

其他回答

如果所有的步骤文件实际上已经完成,那么分支可以简单地重新设置,例如从您的GUI,大约有三个鼠标点击:分支,重新设置,是的!

因此,我经常在实践中做的事情,以逆转不需要的地方变化,就是承诺所有的好事,然后重新设置分支。

如果好事是在单一的承诺中承诺,那么你可以使用“修改最后的承诺”将其带回被推翻或不推翻,如果你最终想承诺它有点不同。

这可能不是你正在寻找问题的技术解决方案,但我认为这是一个非常实用的解决方案. 它允许你选择性地排除未完成的变化,重新调整你不喜欢的变化,并保持你所做的变化。

因此,简而言之,我只是承诺,分支重新设置,并修改最后的承诺。

我真的觉得这篇文章有用来解释什么时候使用什么命令: http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

有几个不同的案例:

如果您没有下载文件,则使用 git checkout. Checkout “更新工作树中的文件以匹配指数中的版本”。 如果文件没有下载(因此添加到指数)... 这个命令将基本上将文件转换为您最后的承诺。

我怀疑使用 git stash 是很受欢迎的选择,因为它有点不那么危险. 你总是可以回到它,如果你偶然在使用 git reset 时跳过太远。

请参见上面的文章以获得更多建议。

您可以创建自己的标签,描述如何以描述的方式进行。

我用下一个字符来排除变化。


排除工作树中的一个(列表)文件(s)中的变化

discard = checkout --

然后,你可以使用它作为附加,以排除所有变更:

discard .

或者只是一个文件:

discard filename

否则,如果你想删除所有的更改,以及未追踪的文件,我使用一个混合的检查和清洁:

清理和排除工作树中的变更和未追踪文件

cleanout = !git clean -df && git checkout -- .

所以使用是简单的如下:

cleanout

现在在下一个GitHub repo中可用,其中包含许多联盟:

HTTPS://github.com/GitAlias/吉塔利亚

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

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

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

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

2019年更新

您现在可以在一个跟踪文件中删除未完成的更改,使用:

git restore <file>

在当前目录中的所有跟踪文件中(重复)与:

git restore .

如果您将后者从存储库的根中运行,则将删除项目中的所有跟踪文件中的未进行的更改。

笔记

git restore 于 2019 年 7 月推出,并在 2.23 版本中发布,作为 git checkout 命令分成 git restore 文件和 git switch 分支的部分。 git checkout 仍然按照它所使用的方式行事,而旧的答案仍然是完美的。