移动提交回主人

时间:2013-04-15 21:58:10

标签: git

我无意中向一个我不打算的分支提交了一系列提交。我打算将它们放在master中,但最后将它们放在共享分支上,我们将调用integ。我想找到一种方法从integ删除这些提交并将它们放在master上;我希望他们永远不会存在于integ

integmaster都已在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似乎从未进行过这些提交?
  • 这可能吗?
  • 如果没有,我该如何回到可以继续的地方?

提前致谢!

3 个答案:

答案 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进行提交将是一个快速合并。 然后你可以担心如何从集成中删除这些提交(我不知道如何)。