作者回复: C1 <-- C2 <-- C3 <-- C4 , Cn全部是commit,且C1是C2的父亲,依此类推。
你的问题是说“如果C3有问题,你想撤销C3的修改,为此生成C5,历史树变成C1 <-- C2 <-- C3 <-- C4 <-- C5”,对吗?如果是这样,执行 git revert C3 ,就会生成C5,且C5就是清除C3的变更 。
如果你无须保留 C3和C4,只想让分支回到C2,那么执行 git reset --hard C2 。⚠️我用了--hard,它会把工作区和暂存区都回退到C2,如果你想保留工作区,请不要使用 --hard ;如果甚至想保留暂存区的变更,那么必须加上 --soft C2。
有空请理解reset带了不同参数的三个操作的区别:
git reset --hard C2
git reset C2
git reset --soft C2
C2代表某个commit