我开发了许多非常相似的项目 - 使用相同的基本功能。我的情景假设,我有基本分支,例如'掌握',然后我从' master'新分支,例如' project1-dev',' project2-dev' - 创建的分支是单独开发的,但有时我想为project1-dev添加新功能,然后将此功能移动到' master',然后与' project2-dev'合并。在Visual Studio 2015中,我可以使用' Rebase' ,但它也会在添加新功能之前移动添加的更改。
有没有办法从' project1-dev'移动选定的提交?到'掌握',然后与' project2-dev'合并?
答案 0 :(得分:0)
您可以轻松地将新功能从project1-dev
合并到master
和project2-dev
,方法是将该功能保存在由所有三个分支的最佳共同祖先创建的新分支中。这是git-merge-base
派上用场的地方。
使用此命令(注意反向标记的使用):
$ git checkout -b new_feature_branch `git merge-base master project1-dev project2-dev`
您最终会得到一个名为new_feature_branch
的新分支,其HEAD
设置为master
,project1-dev
和project2-dev
的共同祖先。< / p>
(如果只运行$ git merge-base master project1-dev project2-dev
,您将获得这三个分支的共同祖先的提交SHA。)
这个新分支是您进行新功能的地方。完成后,您可以将其合并回所有三个分支,而不将其他不需要的作品合并到master
和project2-dev
。
$ cd new_feature_branch
$ # do some work and commit
$ git checkout master
$ git merge --no-ff <new_feature_branch> # merge new feature into master
$ git checkout project1-dev
$ git merge --no-ff <new_feature_branch> # merge new feature into project1-dev
$ git checkout project2-dev
$ git merge --no-ff <new_feature_branch> # merge new feature into project2-dev
答案 1 :(得分:0)
首先,因为你首先使用rebase我假设你还没有推动你将要移动的任何更改,或者你是项目中唯一的一个并且会做{{{ 1}}等等。
无论如何,让我们说你想从git push -f
到project1-dev
只提交一些提交,但只能提交到提交A,但是远远超过提交者的头部{ {1}}。执行以下操作:
master