作者回复: 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
作者回复: 嗯嗯,可以的,对应的几个commit 设置为 d 即可
作者回复: 先描述你遇到的问题吧。没看懂问题。 能还是不能,只要commit还未被清理,即使没有分支或tag指向它,都是可以被找回来的。
作者回复: 会不会是git的bug?你把两次执行的返回结果打出来看一下吧