假设我的远程master
上有project
分支和origin
分支。工作主要在project
分支中完成,但偶尔需要将错误修复进入master
,以便可以立即部署。最终,当项目完成时,我希望能够将项目中的所有提交压缩到一个提交中,然后将其合并到master
中。
通常使用功能分支(不会推送到origin
),我们只需使用master
进行变基并按照我们的快乐方式进行更新,但因为project
是在origin
上它自己的分支,我不知道如何按照我想要的方式保存历史记录(从master
提交,然后提交新的project
提交,理想情况下没有合并提交)到期关于在远程分支上重写历史的保障措施。目前我们通过删除远程project
并使用正确的历史记录重新创建它来做到这一点,但这绝对不是最理想的。
我可以在远程project
重写历史记录,因为这只是一个2人的团队,我们理解其含义,并且愿意过于谨慎。但是我该如何实现呢?
答案 0 :(得分:2)
你可以在git中合并分支
git checkout project
git merge origin/master
只要它们来自同一个祖先,它就会将master中的所有更改合并到项目中。
答案 1 :(得分:1)
git checkout project
git rebase master
git push origin +project:project
现在只是想弄清楚如何在另一台计算机上正确提取更改!
答案 2 :(得分:0)
我倾向于将“项目”中的相应更改变为“主”,以便“主”包含您想要的代码。
然后我会将'master'合并回'project',或者只是跟踪已经应用的patch-id。 (无论哪种方法,都要始终如一!)。就个人而言,我认为将“主人”合并回“项目”从长远来看更为简单。
答案 3 :(得分:0)
关于功能分支,我更喜欢在master
上重新定位它们。这对于长时间运行的功能分支尤其有用,这些功能分支在返回master
之前可能需要大量开发,而master
将并行发展。
重新定位将对您的分支进行更改并将其应用于master
,结果将是您的新分支。 master
本身将保持不变。
当您的project
分支签出时,您可以执行以下操作:
(project) $ git rebase master
或明确地:
(some-branch) $ git rebase master project
注意:重新定位会重写您的分支机构的历史记录!所以要小心。
有关详细信息,请参阅documentation。