【发布时间】:2016-06-23 02:13:52
【问题描述】:
我对我的 git repo 做了一些更改并提交了一些内容。这是我想做的,说我的 git 历史看起来像 HEAD --> c1 --> c2 --> c3 --> c4。 问题 1) 现在如果我恢复 c1,它是否也会恢复所有 c2、c3、c4 ?我的理解是它只恢复 c1 并保持 c2、c3、c4 不变。 2) 现在我想恢复所有 c1、c2、c3 和 c4 并返回 HEAD。最好的方法是什么。
【问题讨论】:
我对我的 git repo 做了一些更改并提交了一些内容。这是我想做的,说我的 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
【讨论】:
Revert 将创建一个提交,该提交将撤消您要恢复的修订版本的更改。
如果你这样做:
git revert c1
你会以:
revertC1 -> (前一个 HEAD) -> c1 -> c2 -> c3 -> c4 ...
而且它只会恢复提交的更改。
因此,对于您想要删除 HEAD 之前的四个提交的场景:
头 -> c1 -> c2 -> c3 -> c4
等同于:
头 -> 头~1 -> 头~2 -> 头~3 -> 头~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
只有在您没有推送更改的情况下。
【讨论】: