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
只有当您还没有推送您的更改时才会这样做。
我对 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
只有当您还没有推送您的更改时才会这样做。