git checkout 不会删除新添加的文件

Posted

技术标签:

【中文标题】git checkout 不会删除新添加的文件【英文标题】:git checkout doesn't remove the newly added files 【发布时间】:2021-03-03 04:28:03 【问题描述】:

我想将我的 repo 恢复为之前提交的确切状态。然后进行新的提交(作为还原的一部分)并推送到远程。我不想使用git push -f,所以我不想重写提交。我想使用一个新的提交并撤消多项更改。

所以我跑了git checkout [HASH] -- .

但我意识到这个命令并不能完全恢复。在后面的提交中添加的文件实际上并没有被删除。

我究竟如何在 git 中还原?

【问题讨论】:

【参考方案1】:

如果您的本地 git 足够新(2.27+),git restore 是要使用的命令:

git restore [HASH]

如果由于某种原因,您无法将本地 git 升级到足够新的版本, 使用git read-tree

git read-tree [HASH]

【讨论】:

要在旧 Git 中获得git restore <hash> 的效果,请使用git read-tree -u <hash>【参考方案2】:

它的工作原理与git reset --hard 相同,但有一个重要 区别,git checkout工作目录 安全,所以它不会覆盖您的工作目录中的现有更改。

如果您希望撤消/恢复提交,您可以使用要恢复的提交中的commit hash 执行以下操作:

git revert <commit hash>

但是你也可以清除你的working directory然后你可以做git checkout &lt;commit hash&gt;

【讨论】:

以上是关于git checkout 不会删除新添加的文件的主要内容,如果未能解决你的问题,请参考以下文章

git checkout .和git checkout -f的区别;git add . git add -u git add -A的区别

git checkout .和git checkout -f的区别;git add . git add -u git add -A的区别

git stash 储藏

GitGit 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )

GitGit 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )

git清除所有commit