将选定的git提交到Visual Studio中的其他分支

问题描述:

我开发了许多非常相似的项目 - 使用相同的基本特征。我的场景假设,我有基本的分支,例如'主',然后我从'主'新分支创建'project1-dev','project2-dev' - 创建的分支是单独开发的,但有时我想为project1-dev添加新功能,然后将此功能移到'master',然后与'project2-dev' 。在Visual Studio 2015中,我可以使用'Rebase',但它也会在添加新功能之前添加更改。 enter image description here将选定的git提交到Visual Studio中的其他分支

有没有办法将选定的提交从'project1-dev'移动到'master',然后与'project2-dev'合并?

+0

如果答案对您的问题有帮助,请考虑接受和/或upvoting。 –

您可以轻松地通过保持这项工作从所有三个部门的最佳共同祖先创造了一个新的分支从project1-dev合并的新功能都masterproject2-dev。这是git-merge-base将派上用场的地方。

使用此命令(注意反单引号的用法):

$ git checkout -b new_feature_branch `git merge-base master project1-dev project2-dev` 

,你会最终有一个名为new_feature_branch新的分支,其HEAD被设置为masterproject1-devproject2-dev共同祖先。

(如果你只运行$ git merge-base master project1-dev project2-dev,你会得到提交的三个分支的共同祖先的SHA)。

这个新的分支是在那里你会做你的新特性的工作。完成后,您可以将其合并回所有三个分支,而无需将其他不需要的作品合并到masterproject2-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 

首先,因为使用的是变基在我假设你没有推任你要去尚未移动变化放在首位,或者您是该项目的唯一一个和意志做一个git push -f

无论如何,让我们假设你想短短提交摆脱project1-devmaster,但只可以追溯到犯,但就向前的project1-dev头。请执行以下操作:

git checkout project1-dev -b new_master #create branch new_master at project1-dev 
git rebase --onto master A^ new_master #"Moves" A through new_master onto master 
git checkout project1-dev 
git reset --hard A^      #moves project1-dev backwards to A's parent 
git checkout master 
git merge new_master      #moves master forwards to where it should be 
git branch -d new_master     #deletes temp branch