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


当前回答

如果几乎不可能删除文件的修改,你是否考虑忽略它们? 如果这个声明是正确的,并且你不会在开发过程中触摸这些文件,这个命令可能有用:

git update-index --assume-unchanged 文件_to_ignore

其他回答

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

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

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

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

有几个不同的案例:

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

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

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

我有一個奇怪的情況,在那裡一個檔案總是無關,這有助於我解決。

git rm.gitattributes git add -A git reset --hard

只用:

git stash -u

是的,容易。

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

git checkout -- .
git clean -df

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

下面实际上只是一个解决方案,如果你正在与一个存储库的福克工作,在那里你经常同步(例如拖请求)与另一个复制。

我有一个类似的问题,也许不是相同的,我很遗憾地说我的解决方案不是理想的,但它最终是有效的。

我会经常有 git 状态消息如下(包含至少 2/4 文件):

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# 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:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

一个激动人心的眼睛会注意到,这些文件有双重的,这是一个单一的字母的情况下. 某种方式,我不知道什么导致我下这个路径开始(因为我没有工作这些文件自己从上流的repo),我已经转换了这些文件. 试试这个页面上列出的许多解决方案(和其他页面)似乎没有帮助。