“git rm –cached x”vs“git reset head -x”?
GitRef.org – 基本 :
git rm
会从暂存区删除条目。 这与git reset HEAD
有些不同,它会“暂停”文件。 我的意思是说,在我们开始修改事物之前,将其暂存区恢复到那里。 另一方面,git rm
只是将文件踢出整个舞台,以便它不包含在下一个提交快照中,从而有效地删除它。默认情况下,一个
git rm file
将完全移除临时区域中的文件,也会从您的磁盘>(工作目录)中删除该文件。 要将文件保留在工作目录中,可以使用git rm --cached
。
但是git rm --cached asd
和git reset head -- asd
究竟有什么区别呢?
有三个地方,一个文件可以是 – 树,索引和工作副本。 当你只是添加一个文件到一个文件夹,你将其添加到工作副本。
当你做的东西像git add file
你把它添加到索引。 而当你提交它时,你也将它添加到树中。
它可能会帮助你在git reset中知道三个更常见的标志:
git reset [ –
<mode>
] [<commit>
]这种forms将当前分支头重置为
<commit>
并可能更新索引(将其重置为<commit>
的树),并根据<mode>
工作树,该树必须是以下之一:
– 柔软的根本不碰触索引文件或工作树(但像所有模式一样,将头重置为
<commit>
)。 这将保留所有更改的文件“更改为提交”,因为git状态会将其放入。–mixed
重置索引而不是工作树(即,保存更改的文件但未标记为提交)并报告尚未更新的内容。 这是默认的操作。
– 硬
重置索引和工作树。 丢弃自从
<commit>
之后对工作树中跟踪文件所做的任何更改。
现在,当你做一些像git reset HEAD
– 你实际上做的是git reset HEAD --mixed
,它会“重置”索引到它开始添加文件/添加修改索引之前的状态(通过git add
) 在这种情况下,工作副本和索引(或分段)是同步的,但是在复位之后,使HEAD和索引同步。
另一方面git rm
从工作目录和索引中删除一个文件,当你提交时,文件也从树中删除。 但是, git rm --cached
将文件从索引中删除,并将其保留在工作副本中。 这与git add file
完全相反在这种情况下,你使索引不同于HEAD和工作,其中HEAD具有以前提交的文件版本,工作副本有las修改,如果有的话或内容从文件的HEAD中删除了索引中的文件。 现在提交将同步索引和树,文件将被删除。
也许一个例子会有所帮助:
git rm --cached asd git commit -m "the file asd is gone from the repository"
与
git reset HEAD -- asd git commit -m "the file asd remains in the repository"
请注意,如果您还没有更改其他任何内容 ,则第二次提交将不会执行任何操作。
git rm --cached file
将从舞台上删除文件。 也就是说,当你提交的文件将被删除。 git reset HEAD -- file
将简单地将暂存区中的文件重置为HEAD提交的状态,也就是说,将撤消自上次提交以来对其所做的任何更改。 如果这种变化恰好是新增文件,那么它们将是等效的。