我正在试图找出与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'。
我们做错了什么,我们应该根据需要使用不同的方法/工作流程吗?
答案 0 :(得分:1)
我认为你误解了git rebase
应该如何使用。你说当B想把他/她的工作变成master
时,开发人员会这样做:
git checkout master
git pull
git rebase dev
git checkout dev
当您在git rebase dev
上运行master
时,就会(大致)说明master
但dev
中不属于master
的所有提交,并且尝试在git checkout master
git pull
git checkout dev
git rebase master
之上重新应用任何引入新变化的内容。您可能想要执行以下操作:
dev
...以便在master
之上重新应用dev
中的任何新内容。请注意,在这些命令之后,如果master
中没有任何新内容,则只允许dev
和gitk --all
相同。
作为更一般性的评论,在这种情况下找出历史记录错误的最简单方法通常是使用一种工具,向您显示提交图的图形表示。例如,如果您运行master
,您应该能够看到dev
和dev
的位置,以及它们未指向您预期的相同提交的原因。
此外,值得注意的是,为避免重写已发布历史记录时可能出现的混淆,当master
分支包含尚未合并到{{1的已发布提交时,B可能希望避免执行rebase }}