我无意中向一个我不打算的分支提交了一系列提交。我打算将它们放在master
中,但最后将它们放在共享分支上,我们将调用integ
。我想找到一种方法从integ
删除这些提交并将它们放在master
上;我希望他们永远不会存在于integ
。
integ
和master
都已在github上共享。我们的CI环境使用integ
分支。
我已经读过git rebase
是一个选项,但是根据我的阅读,它将使得整合分支无法继续使用,因为它的历史记录中的提交已被重新播放到{{1 }}。具体来说,我指的是:
http://blog.evan.pro/a-simple-explanation-of-git-rebase
它说:
请勿从原点/功能/我的话题中拉出,合并或重新发布此点!!!
为什么不呢?因为Git只是认为,“哦看,origin / feature / my-topic有两个提交(D和E),我们在本地没有feature / my-topic。让我们将它们合并进去!“......这是一个问题,因为我们确实有这些提交,但是当我们运行git rebase时,它们的哈希值被重写为F和G.
我的问题是:
master
中的10个提交最终显示在integ
上,而master
似乎从未进行过这些提交? 提前致谢!
答案 0 :(得分:2)
你无法从git的历史中“删除”某些东西。您可以使用
revert
提交
git revert HEAD~n
或
git revert $SHA1_HASH
执行此操作后,您必须从提交中创建补丁并在主分支上手动应用它们或使用git cherry-pick
,这基本上是相同的(感谢sleske提供!)
答案 1 :(得分:2)
以下是如何将最后3次提交从integ
移至master
。
git checkout master
git cherry-pick integ^^
git cherry-pick integ^
git cherry-pick integ
git checkout integ
git reset --hard HEAD~3
答案 2 :(得分:0)
如果要将“整合”提交应用于“主”,则应进行合并。首先尝试执行此操作以确保不会丢失更改。 如果没有人对master进行提交将是一个快速合并。 然后你可以担心如何从集成中删除这些提交(我不知道如何)。