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

问题描述 投票:0回答:4

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

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。

git
4个回答
1
投票
3

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

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

--no-commit

1
投票

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

HEAD


1
投票

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

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

1
投票

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

a=$(git rev-parse HEAD)

给你的

git reset --hard #hash-commit-2
© www.soinside.com 2019 - 2024. All rights reserved.