假设你的git历史是这样的:
1 2 3 4 5
1-5是单独的修订。你需要删除3,同时仍然保持1、2、4和5。如何做到这一点呢?
当一个要删除的版本之后还有数百个版本时,有没有有效的方法?
假设你的git历史是这样的:
1 2 3 4 5
1-5是单独的修订。你需要删除3,同时仍然保持1、2、4和5。如何做到这一点呢?
当一个要删除的版本之后还有数百个版本时,有没有有效的方法?
当前回答
如果你想要做的只是删除在版本3中所做的更改,你可能想要使用git revert。
Git恢复只是创建一个新的版本,其中包含撤销正在恢复的版本中所有更改的更改。
这意味着,您保留了关于不需要的提交和删除这些更改的提交的信息。
如果在同一时间有人从您的存储库中取出数据,这可能会友好得多,因为恢复基本上只是一个标准的提交。
其他回答
我也遇到了类似的情况。使用下面的命令使用交互式rebase,并在选择时,删除第三次提交。
git rebase -i remote/branch
收音机和kareem的回答对我没有任何帮助(只有消息“当前分支是最新的。”出现)。这可能是因为'^'符号在Windows控制台中不起作用。但是,根据这条注释,将'^'替换为'~1'可以解决这个问题。
git rebase --onto <commit-id>^ <commit-id>
如前所述,git-rebase(1)是您的朋友。假设提交在你的主分支中,你会这样做:
git rebase --onto master~3 master~2 master
之前:
1---2---3---4---5 master
后:
1---2---4'---5' master
从git-rebase (1):
提交的范围也可以是 删除与rebase。如果我们有 以下情况: E - F - G - H - I - J局部药 然后命令 git rebase - to topicA~5 topicA~3 topicA 会导致移除 提交F和G: E - H”——我——J的局部药 如果F和G在某些方面有缺陷,这是有用的 或者不应该是topicA的一部分。 注意参数to -onto和 参数可以为任意值 commit-ish有效。
根据这条评论(我检查了这是真的),rado的答案非常接近,但让git处于分离的头部状态。相反,删除HEAD并使用这个从你所在的分支中删除<commit-id>:
git rebase --onto <commit-id>^ <commit-id>
如果你想要做的只是删除在版本3中所做的更改,你可能想要使用git revert。
Git恢复只是创建一个新的版本,其中包含撤销正在恢复的版本中所有更改的更改。
这意味着,您保留了关于不需要的提交和删除这些更改的提交的信息。
如果在同一时间有人从您的存储库中取出数据,这可能会友好得多,因为恢复基本上只是一个标准的提交。