Rebase的主人在另一个分支的顶部(两个已经被推)

时间:2013-11-09 02:01:18

标签: git

我知道stackoverflow中有很多类似的问题,但在问这个问题之前我做了一些研究,找不到直接回答我的问题。

我的情况如下:我有一个私人回购,并且正在与另一位开发人员合作。因此,我们是两个使用私有存储库的开发人员,这意味着push -f不是世界末日。这个存储库很快就会公开,此时我们会修改错误并做一些改变以改变历史记录(这样,一旦存储库上市,人们就可以使用可靠的工作提交基础)。

昨天我将提交推送到master,由于某种原因,只能在我的机器和开发服务器中运行,但不能在我的同事机器和生产服务器中运行。

因此我们从先前的提交中分叉了一个分支(album)。我的同事在这个分支上多次提交。他们将分支推送到远程存储库(我们需要这样做以便将他的工作版本发布到生产服务器),我们最终得到了类似的东西:

master: (previous commits) - C1 - C2 (my "troubled" commit)
                              \
album:                        C3 - C4 - C5 - C6  

在正常情况下,我会结帐master(其中我的问题提交C2是头部)并将album合并到其中。

但这会让C2留在历史上,而且,因为我们无法弄清楚我们的生活,为什么我的提交打破了环境,我们觉得最好“收获”提交其他方式。

我在想做什么:

  • 结帐album
  • 在它上面使用rebase master
  • 本地和远程删除album
  • push -f master

期望的结果:

master: (previous commits) - C1 - C3 - C4 - C5 - C6 - C2' 

应修复C2'并在所有机器上工作。

所以,我在思考吗?如果没有,那里的git大师会怎么处理这个?

谢天谢地。

3 个答案:

答案 0 :(得分:2)

那就行了,我会这样得到结果:

$ git checkout album
$ git cherry-pick master
$ git checkout -B master

和ref清理相同。

答案 1 :(得分:1)

如果我理解正确,我相信你想要的是:

  • git checkout master
  • git reset --hard< sha1 of C1>

此时C2暂时孤立,无法通过您的分支名称访问。现在,您可以像平常一样合并分支album

现在,为了解决孤立的C2提交问题,您需要:

  • git checkout master
  • git cherry-pick< sha1 of C2>

这将使您的主分支看起来像:

master: (previous commits) - C1 - C3 - C4 - C5 - C6 - C2

答案 2 :(得分:0)

你可以在主人之上进行改造,是的。这应该适用于分支的位置。就个人而言,我会在一个新目录中克隆回购,执行干预运行并确认结果。如果完全符合要求,请重复正常工作目录中的步骤。

干杯