Git LFS 改动:这个奇怪的命令序列到底做了什么
Git LFS alteration: what does this odd sequence of commands really do
有人可以向我解释这一系列命令的实际作用吗?
git rm --cached -r .
git reset --hard
git rm .gitattributes
git reset .
git checkout .
我从an answer to Git error: Encountered 7 file(s) that should have been pointers, but weren't那里拿来的。它做了它应该做的事情,但我想知道它为什么起作用以及它做了什么。盲目地遵循包含 --hard、reset 和 rm...的指令通常感觉超级可怕。
could someone explain to me what this series of commands actually do?
It seems to be a long winded way of writing git reset --hard
with most of it effectively doing nothing,但我可能是错的。请参阅此答案的结尾。
我可以解释git reset --hard
。
当 Git 收银台变脏时,有两个区域需要清理。
- 工作树(即文件本身)
- 暂存区(即您 Git 添加的内容)
对于基本 Git,没有 git-lfs
,您需要两个命令。
git reset --hard
(默认为HEAD,当前commit)
git clean
git-reset
有点像 git-checkout
,但使用了类固醇。它会更改您签出的提交,但您可以控制暂存区和工作树是否随之更改。
git reset --soft
仅对新提交进行更改,您的文件和暂存更改保持不变。 git reset --soft HEAD^
会将您移动到上一个提交,但提交中的所有更改都将暂存,所有未暂存的更改将保留。如果你想重做一个提交,这很有用,我把它别名为 redo
.
git reset --mixed
更改提交并重置暂存区。 git reset --mixed HEAD^
与上面类似,但所有先前提交的更改都将取消暂存。
git reset --hard
更改提交并重置暂存区和您的文件。这会擦除您的所有更改并让您回到干净的状态。 git reset --hard HEAD
擦除所有更改并将您恢复到当前提交。 git reset --hard HEAD^
擦除所有更改并恢复到之前的提交;如果您想撤消提交,这很有用,我将其别名为 undo
.
您签出的最后一次提交始终是 ORIG_HEAD
,因此您始终可以 return 使用 git reset --hard ORIG_HEAD
。
最后,如果您有任何未跟踪的文件,git clean
将删除它们。
有关更多信息,请参阅 Reset Demystified。
What is that answer doing?
- git rm --cached -r .
这会清除临时区域。没有必要,因为...
- git 重置 --hard
...这也会清除暂存区并将您移动到当前提交的原始版本,如上所述。
- git rm .git属性
gitattributes 允许您在存储库中的路径上定义属性。 git-lfs
等工具使用它来标记哪些文件正在使用 LFS。吹走整个东西将重置 all 属性,因此根据您使用的其他工具,这可能不是一个好主意。
- git 重置 .
这是git reset --mixed HEAD
。这将取消他们刚刚所做的 git rm
。我不知道你为什么想要那个。
- git结帐。
这是 git checkout HEAD
,它恢复 .gitattributes
使整个练习变得毫无意义。
所以,除非我遗漏了什么,否则就是 git reset --hard HEAD
。
有人可以向我解释这一系列命令的实际作用吗?
git rm --cached -r .
git reset --hard
git rm .gitattributes
git reset .
git checkout .
我从an answer to Git error: Encountered 7 file(s) that should have been pointers, but weren't那里拿来的。它做了它应该做的事情,但我想知道它为什么起作用以及它做了什么。盲目地遵循包含 --hard、reset 和 rm...的指令通常感觉超级可怕。
could someone explain to me what this series of commands actually do?
It seems to be a long winded way of writing git reset --hard
with most of it effectively doing nothing,但我可能是错的。请参阅此答案的结尾。
我可以解释git reset --hard
。
当 Git 收银台变脏时,有两个区域需要清理。
- 工作树(即文件本身)
- 暂存区(即您 Git 添加的内容)
对于基本 Git,没有 git-lfs
,您需要两个命令。
git reset --hard
(默认为HEAD,当前commit)git clean
git-reset
有点像 git-checkout
,但使用了类固醇。它会更改您签出的提交,但您可以控制暂存区和工作树是否随之更改。
git reset --soft
仅对新提交进行更改,您的文件和暂存更改保持不变。 git reset --soft HEAD^
会将您移动到上一个提交,但提交中的所有更改都将暂存,所有未暂存的更改将保留。如果你想重做一个提交,这很有用,我把它别名为 redo
.
git reset --mixed
更改提交并重置暂存区。 git reset --mixed HEAD^
与上面类似,但所有先前提交的更改都将取消暂存。
git reset --hard
更改提交并重置暂存区和您的文件。这会擦除您的所有更改并让您回到干净的状态。 git reset --hard HEAD
擦除所有更改并将您恢复到当前提交。 git reset --hard HEAD^
擦除所有更改并恢复到之前的提交;如果您想撤消提交,这很有用,我将其别名为 undo
.
您签出的最后一次提交始终是 ORIG_HEAD
,因此您始终可以 return 使用 git reset --hard ORIG_HEAD
。
最后,如果您有任何未跟踪的文件,git clean
将删除它们。
有关更多信息,请参阅 Reset Demystified。
What is that answer doing?
- git rm --cached -r .
这会清除临时区域。没有必要,因为...
- git 重置 --hard
...这也会清除暂存区并将您移动到当前提交的原始版本,如上所述。
- git rm .git属性
gitattributes 允许您在存储库中的路径上定义属性。 git-lfs
等工具使用它来标记哪些文件正在使用 LFS。吹走整个东西将重置 all 属性,因此根据您使用的其他工具,这可能不是一个好主意。
- git 重置 .
这是git reset --mixed HEAD
。这将取消他们刚刚所做的 git rm
。我不知道你为什么想要那个。
- git结帐。
这是 git checkout HEAD
,它恢复 .gitattributes
使整个练习变得毫无意义。
所以,除非我遗漏了什么,否则就是 git reset --hard HEAD
。