Git:恢复旧的提交

Git: revert on older commit

我对 git 存储库进行了一些更改并进行了一些提交。这就是我想要做的,假设我的 git 历史看起来像 HEAD --> c1 --> c2 --> c3 --> c4。 问题 1) 现在如果我还原 c1,它是否也还原所有 c2、c3、c4?我的理解是它只恢复 c1,而 c2、c3、c4 保持原样。 2) 现在我想还原所有的 c1、c2、c3 和 c4 并移回 HEAD。执行此操作的最佳方法是什么。

如果您将 c1 还原为 c1 状态,但它会创建新的提交 (c5),其中包含从 c4 到 c1 的所有更改。

[HEAD]--> c1 --> c2 --> c3 --> c4 --> c5 (c1 state)
           |__________________________/\
                     revert

还原将创建一个提交,该提交将撤消您要还原的修订的更改。

所以如果你这样做:

git revert c1

您将以:

结束

revertC1 -> (previous HEAD) -> c1 -> c2 -> c3 -> c4 ...

并且它只会还原提交的更改。

因此,对于您想要删除 HEAD 之前的四个提交的场景:

HEAD -> c1 -> c2 -> c3 -> c4

等同于:

HEAD -> HEAD~1 -> HEAD~2 -> HEAD~3 -> HEAD~4

如果你想删除当前提交之前的四个提交。你可以做到

git revert HEAD~5..HEAD~1

系统将提示您为每个还原创建提交消息,并可能解决冲突。

如果您没有推送您的更改,我会做些什么来保持历史日志干净:

撤消当前提交并保留代码更改

git reset --soft HEAD~1

存储代码更改

git stash

撤消最后四次提交并擦除代码更改

git reset --hard HEAD~4

确保我删除了所有创建的文件和目录

git clean -di

重新应用我想保留的顶级提交的更改

git stash pop

*修复冲突以防出现 没有冲突的时候。提交我的更改

git commit -am "My new changes"

如果准备好推送,请推送。

git push

只有当您还没有推送您的更改时才会这样做。