在rebase之后git branch不等于master

时间:2011-11-18 09:18:15

标签: php git

我正在试图找出与GIT合作的正确方法。我以为我想到了,但最近我们遇到了一些问题。这是我的情况,真的希望我能为我的问题找到一个简单的解决方案。

2人(称他们为A& B)在同一个项目上工作。

A正在减少开发,但他正在审查B并将代码推送到生产中。

B做大部分开发,但不能推向生产,需要A来审核和批准他的代码。

到目前为止,我们的工作方式如下:

A正在研究'master'。

B正在分支'dev' - dev是一个远程分支,B正在推动对它的更改,A可以从远程分支中拉出来。

A直接在'master'上进行更改(将其推送到生产中)。当B完成一个功能时,A正在将'dev'合并到master(git checkout dev; git pull; git checkout master; git merge dev)

B仅在'dev'上工作并告诉A何时合并。如果A对master进行了更改,则B是rebasing(git checkout master; git pull; git rebase dev; git checkout dev)

这似乎工作正常(我们认为这是一种正确的工作方式),但不知何故,即使在A合并之后,B又重新定位,'dev'也不等于'master'。

我们做错了什么,我们应该根据需要使用不同的方法/工作流程吗?

  • 注意:'dev'必须是远程分支,因为有时A会帮助B解决问题,'dev'也会被推送到在线测试服务器,以便其他人可以测试。

1 个答案:

答案 0 :(得分:1)

我认为你误解了git rebase应该如何使用。你说当B想把他/她的工作变成master时,开发人员会这样做:

git checkout master
git pull
git rebase dev
git checkout dev

当您在git rebase dev上运行master时,就会(大致)说明masterdev中不属于master的所有提交,并且尝试在git checkout master git pull git checkout dev git rebase master 之上重新应用任何引入新变化的内容。您可能想要执行以下操作:

dev

...以便在master之上重新应用dev中的任何新内容。请注意,在这些命令之后,如果master中没有任何新内容,则只允许devgitk --all相同。

作为更一般性的评论,在这种情况下找出历史记录错误的最简单方法通常是使用一种工具,向您显示提交图的图形表示。例如,如果您运行master,您应该能够看到devdev的位置,以及它们未指向您预期的相同提交的原因。

此外,值得注意的是,为避免重写已发布历史记录时可能出现的混淆,当master分支包含尚未合并到{{1的已发布提交时,B可能希望避免执行rebase }}