Git revert 删除不应该删除的文件

Posted

技术标签:

【中文标题】Git revert 删除不应该删除的文件【英文标题】:Git revert removing files that shouldn't be removed 【发布时间】:2021-04-11 09:51:54 【问题描述】:

我有三个提交,我尝试恢复到第一个提交。在这样做时,Git 删除了两个文件,我不知道为什么它们在我尝试恢复的第一次提交中。如果 Git 删除的两个文件在原始提交中,为什么要删除它们?

这是我使用的代码:

git revert <commit id>

这是错误信息:

    Removing style.css
CONFLICT (modify/delete): pages/services.html deleted in (empty tree) and modified in HEAD. Version HEAD of pages/services.html left in tree.
Removing index.html
error: could not revert 9b23173... inital commit
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

【问题讨论】:

git revert 恢复提交,而不是提交。我假设您打算恢复其他提交。另见***.com/a/4114122 git revert 用于恢复提交本身,而不是“恢复提交”。你正在寻找git reset --hard 之类的。 好吧,但是我想重置到旧的提交,同时保留历史以防万一我想再次返回,我是否仍然使用 reset --hard? 您可以还原一系列提交。例如,您可以执行 git revert HEAD HEAD~1 来恢复当前提交和前一个提交。您还可以使用提交范围等。 那么您应该使用git checkout 在提交时查看存储库状态,同时保留您的历史记录(分支所在的位置等) 【参考方案1】:

如果你想把项目的内容收回到某个修订版同时保留以后的历史,可以这样做:

git checkout the-revision-id
git reset --soft the-branch-I-want-to-take-back
# at this point, all changes from the branch you want to take back and the revision you want to go to are in index, ready to be committed
git commit -m "taking everything back in time"
# if you like the result, move the pointer of the branch
git branch -f the-branch-I-want-to-take-back
git checkout the-branch-I-want-to-take-back

【讨论】:

所以 checkout 抓取旧提交并重置 --soft 将 HEAD 重置为该提交,但如果所有这些提交都在 master 分支中,它会是 master 还是这不是最佳实践? 问题是最后你创建了一个 single 修订你想要修改的分支上......所以它不像您正在破解某些东西....这只是获取所需内容的一种简单方法,因此我看不出您如何破坏某些东西。

以上是关于Git revert 删除不应该删除的文件的主要内容,如果未能解决你的问题,请参考以下文章

git 丢弃本地所有文件(新增、删除、修改)

误删除pycharm项目中的文件,如何恢复?

如何执行 git revert 并删除合并历史记录?

在Visual Studio中恢复已删除的项目

git rm --cached 文件名 与git reset HEAD -- 文件名有啥区别?

git revert