我有一些本地修改,如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的人都必须删除整个目录,然后重新克隆。因为他们将无法签出不同的分支(有关提交或存储的错误消息),并且他们将无法提取(有关提交或存储的错误消息)。如果有人知道一种优雅的方法来解决上述问题,请分享。