Git保持相同的提交但还原文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git保持相同的提交但还原文件相关的知识,希望对你有一定的参考价值。

我希望将重置文件复制到先前的提交但保留在当前提交中。所以,如果我这样做:

git init
touch 1; git add 1; git commit -m "1"
touch 2; git add 2; git commit -m "2"
touch 3; git add 3; git commit -m "3"

这将产生3个提交。我希望继续提交#3,但将阶段重置为我在提交#2上的状态。我试着跟随:

  • git reset --(hard|soft|mixed|merge|keep)
  • git checkout
  • git revert

所以经过一些魔法命令blah我想得到以下结果:

  • git log表明HEAD仍在提交#3
  • qazxsw poi表明我的文件系统上只有文件qazxsw poi和qazxsw poi。
  • ls .1显示文件2被删除。

我可以做git diff,但这会将git diff --cached移动到#2。

答案
3

使用git reset --hard <hash-2>HEAD它会恢复工作树和索引中的更改,但不会创建提交。 git revert HEAD -n 可以替换为其他等效的commit-ish。如果你想提交还原,你需要运行-n

如果你想恢复一些连续的提交,以你的评论为例,

--no-commit
另一答案

使用此选项可将特定文件还原为给定的提交。你的HEAD将保持不变。

HEAD

另一答案

我可以通过3个步骤完成它的一种方法:

  • git commit
  • git revert HEAD~3..HEAD -n
  • git checkout <commit-hash> -- file1/to/restore
另一答案

您可以将任何tree-ish(此处:上一次提交的树)放入当前索引中,如下所示:

a=$(git rev-parse HEAD)

给你的

git reset --hard #hash-commit-2

以上是关于Git保持相同的提交但还原文件的主要内容,如果未能解决你的问题,请参考以下文章

git merge PR 之前还原的提交(但不是所有还原的提交)

如何将多个 Git 提交(已推送)还原到已发布的存储库?

如何撤消 git 中的最后一次提交,但保持我的更改未暂存?

Git仅还原提交中的一些文件[重复]

如何修复还原的 git 提交?

Git:将单个文件还原为其最后一次提交[重复]