撤消 git-lfs 中的本地更改
Undo local changes in git-lfs
我有一个包含本地更改的 git-lfs 存储库,我想丢弃它们。我尝试了以下命令但没有成功:
git checkout file
git checkout -- file
git lfs checkout file
git reset --hard
我应该使用什么命令?
谢谢!
编辑:
查看 gitk 的修改显示所有文件的 r/w 属性都已更改。内容相同。
-------------------- .gitattributes --------------------
old mode 100644
new mode 100755
也尝试了这里提到的建议但没有成功:
Unstaged changes left after git reset --hard
TL;DR
您可能手动将 core.fileMode
设置为 true
。将其设置回 false
.
长
Viewing the modifications with gitk revealed that r/w attributes were changed for all files. Contents are identical.
-------------------- .gitattributes --------------------
old mode 100644
new mode 100755
git reset --hard
也会尝试 更改模式。显然这次尝试失败了,也许没有报告任何错误。
这种行为在 DOS/Windows-style 文件系统上很常见,其中根本不支持 +x 和 -x 模式。一些适配器将所有文件报告为模式 644
(rw-r--r--),而一些适配器将所有文件报告为模式 755
(rwx-r-xr-x
);看来你是第二种。
Git 通常 检测并针对这些类型的文件系统进行自我调整:在创建存储库时,Git 会做一些“创建一个文件并更改其模式”测试。如果模式从 +x 变为 -x and/or 反之亦然,Git 认为 OS 和文件系统 do 支持模式,因此它设置了一个配置设置:
core.fileMode true
如果不遵守这些更改,Git认为OS和文件系统不支持模式,因此设置相反的设置:
core.fileMode false
请注意,此设置 core.filemode
(有时采用混合驼峰式大小写,有时全部小写:Git 在这里是 case-insensitive,但其他地方不是)告诉 Git 你的系统是如何工作的。它不控制系统,它只是报告先前的观察。
如果您手动 更改 这个变量,您就是在告诉 Git 您已经更换了操作系统 and/or 文件系统,并且它现在以另一种方式工作。如果您确实替换了 OS and/or 文件系统并且 以另一种方式工作,那么您的新设置是正确的。但如果不是,你现在已经撒谎 Git.
或者,您可以将整个 .git
存储库和工作树移至新的文件系统。当您这样做时,根据您的特定 OS 和文件系统,旧的 core.fileMode
设置现在可能不准确。 Git 不会知道这一点—Git 会相信旧设置。通过移动文件,您实际上是在欺骗 Git,但在这种情况下您可能没有任何理由怀疑类似的事情。
在这两种情况下,解决方法是纠正谎言:通过适当地将 core.fileMode
设置为 false
或 true
来告知 Git 文件系统的实际工作方式.一旦设置正确,Git 将知道是否假定它看到的属性设置有效 (core.fileMode true
),因此您会看到这种变化,或者不会 (core.fileMode false
) 和因此你不会看到这种变化。
我有一个包含本地更改的 git-lfs 存储库,我想丢弃它们。我尝试了以下命令但没有成功:
git checkout file
git checkout -- file
git lfs checkout file
git reset --hard
我应该使用什么命令?
谢谢!
编辑:
查看 gitk 的修改显示所有文件的 r/w 属性都已更改。内容相同。
-------------------- .gitattributes --------------------
old mode 100644
new mode 100755
也尝试了这里提到的建议但没有成功: Unstaged changes left after git reset --hard
TL;DR
您可能手动将 core.fileMode
设置为 true
。将其设置回 false
.
长
Viewing the modifications with gitk revealed that r/w attributes were changed for all files. Contents are identical.
-------------------- .gitattributes -------------------- old mode 100644 new mode 100755
git reset --hard
也会尝试 更改模式。显然这次尝试失败了,也许没有报告任何错误。
这种行为在 DOS/Windows-style 文件系统上很常见,其中根本不支持 +x 和 -x 模式。一些适配器将所有文件报告为模式 644
(rw-r--r--),而一些适配器将所有文件报告为模式 755
(rwx-r-xr-x
);看来你是第二种。
Git 通常 检测并针对这些类型的文件系统进行自我调整:在创建存储库时,Git 会做一些“创建一个文件并更改其模式”测试。如果模式从 +x 变为 -x and/or 反之亦然,Git 认为 OS 和文件系统 do 支持模式,因此它设置了一个配置设置:
core.fileMode true
如果不遵守这些更改,Git认为OS和文件系统不支持模式,因此设置相反的设置:
core.fileMode false
请注意,此设置 core.filemode
(有时采用混合驼峰式大小写,有时全部小写:Git 在这里是 case-insensitive,但其他地方不是)告诉 Git 你的系统是如何工作的。它不控制系统,它只是报告先前的观察。
如果您手动 更改 这个变量,您就是在告诉 Git 您已经更换了操作系统 and/or 文件系统,并且它现在以另一种方式工作。如果您确实替换了 OS and/or 文件系统并且 以另一种方式工作,那么您的新设置是正确的。但如果不是,你现在已经撒谎 Git.
或者,您可以将整个 .git
存储库和工作树移至新的文件系统。当您这样做时,根据您的特定 OS 和文件系统,旧的 core.fileMode
设置现在可能不准确。 Git 不会知道这一点—Git 会相信旧设置。通过移动文件,您实际上是在欺骗 Git,但在这种情况下您可能没有任何理由怀疑类似的事情。
在这两种情况下,解决方法是纠正谎言:通过适当地将 core.fileMode
设置为 false
或 true
来告知 Git 文件系统的实际工作方式.一旦设置正确,Git 将知道是否假定它看到的属性设置有效 (core.fileMode true
),因此您会看到这种变化,或者不会 (core.fileMode false
) 和因此你不会看到这种变化。