如何丢弃git中未提交的本地更改? (重置,结账,清理不起作用)

时间:2017-07-20 15:47:19

标签: git

我有一些本地修改,如git status所示:

git status
# On branch foobar-stage
# 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:   themes/foobar/svg/images/android-alert-lightgray.svg
#   modified:   themes/foobar/svg/images/search-white.svg
#   modified:   themes/foobar/svg/source/android-share-alt.svg
#   modified:   themes/foobar/svg/source/backup-menu.svg
#   modified:   themes/foobar/svg/source/custom-email.svg

我希望它们被git reset --hard丢弃,但在执行此操作后,git status仍会显示相同的修改文件。那么我尝试git clean -f没有输出,但仍git status显示相同的文件。

git checkout的输出是

git checkout
M   themes/foobar/svg/images/android-alert-lightgray.svg
M   themes/foobar/svg/images/search-white.svg
M   themes/foobar/svg/source/android-share-alt.svg
M   themes/foobar/svg/source/backup-menu.svg
M   themes/foobar/svg/source/custom-email.svg

但在执行此操作后,git status仍会显示相同的文件。

我已检查并重新检查了文件权限。事实上,我能够自己rm这些文件:

rm themes/foobar/svg/images/android-alert-lightgray.svg
rm themes/foobar/svg/images/search-white.svg

之后,git status显示:

git status
# On branch foobar-stage
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   deleted:    themes/foobar/svg/images/android-alert-lightgray.svg
#   deleted:    themes/foobar/svg/images/search-white.svg
#   modified:   themes/foobar/svg/source/android-share-alt.svg
#   modified:   themes/foobar/svg/source/backup-menu.svg
#   modified:   themes/foobar/svg/source/custom-email.svg

然后,如果我再次git reset --hard,它会将删除的文件恢复到修改后的状态。

再次检查git status会给出:

git status
# On branch foobar-stage
# 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:   themes/foobar/svg/images/android-alert-lightgray.svg
#   modified:   themes/foobar/svg/images/search-white.svg
#   modified:   themes/foobar/svg/source/android-share-alt.svg
#   modified:   themes/foobar/svg/source/backup-menu.svg
#   modified:   themes/foobar/svg/source/custom-email.svg

编辑:

更多信息:

这是一个非常烦人的git-ism,我对此并不十分了解。一旦使用一种文件格式提交文件,然后更改.gitattributes,您最终会在结帐后直接显示已修改的文件。您无法重置(它们最终会再次显示为已修改)或签出不同的分支,因为git说您必须提交或存储。我今天花了一些时间试图在沙盒中重现症状,但谁有时间呢!据我所知,没有优雅的方法可以恢复;在一台计算机上,您备份并删除所有受影响的文件(并提交)。然后再将它们添加到repo中,提交并推送。然后,所有签出该repo的人都必须删除整个目录,然后重新克隆。因为他们将无法签出不同的分支(有关提交或存储的错误消息),并且他们将无法提取(有关提交或存储的错误消息)。如果有人知道一种优雅的方法来解决上述问题,请分享。

0 个答案:

没有答案