撤消坏合并已经推送到原点

时间:2016-02-08 10:57:04

标签: java android git merge repository

情况如下:

我有一个开发分支和功能分支,在完成功能时我想将它合并到develop中。因此产生冲突,我首先开发成功能来解决它​​然后提交修改但是:

我只提交解决冲突的文件,忘记其余的。因此,当我将功能合并到开发中时,它会回滚许多提交...

origin develop>  ----o-c-c-c-o-------m------
                      \       \     /
 local feature>        f-------m-r-o

提交' c'与功能合并但是当再次与开发合并时我忘记了它们。

我该如何解决这个问题?

编辑:

我没有尝试过git,所以我要求的答案比我的问题更具针对性 git reset 响应

2 个答案:

答案 0 :(得分:1)

你的合并很糟糕。

origin develop>  ----o1-c1-c2-c3-o2---------m2------
                      \           \        /
 local feature>        f1----------m1-r1-o3

您错误在提交m1,并且更改会在链中进一步传播。

重写历史记录

这个问题最干净的解决方案是重写历史记录,所以一切都在正常流动。然而,这打破了每一个人的历史,所以他们需要将他们的分支重置为新的头部,只有在你推动之前看到你的错误时才推荐。

修复程序正在重做合并,然后重做与主服务器的最终合并。

  1. on branch: featuregit reset --hard f1

    我们将回到提交f1

  2. 的分支状态
  3. on branch: featuregit merge o2

    重做我们的合并,确保我们这次没有丢弃我们的索引

  4. on branch: featuregit cherry-pick r1

    包括在提交r1

  5. 中引入的更改
  6. on branch: featuregit cherry-pick o3

    包括在提交o3

  7. 中引入的更改
  8. on branch: featuregit push -f

    强制推送我们的固定功能分支

  9. on branch: featuregit checkout develop

    切换到开发,我们可以解决它

  10. on branch: developgit reset --hard o2

    我们将回到提交o2

  11. 的分支状态
  12. on branch: developgit merge feature

    重做主要分支合并的功能,这将修复整个链。

  13. on branch: developgit push -f

    强行推动我们的固定开发部门。

答案 1 :(得分:1)

由于你已经推动过,最安全的事情(在develop上)是挑选丢失的提交。对于每个提交C,运行git cherry-pick C