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 <commit hash>
【讨论】:
以上是关于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的区别
GitGit 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )
GitGit 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )