将选定的git提交到Visual Studio中的其他分支
我开发了许多非常相似的项目 - 使用相同的基本特征。我的场景假设,我有基本的分支,例如'主',然后我从'主'新分支创建'project1-dev','project2-dev' - 创建的分支是单独开发的,但有时我想为project1-dev添加新功能,然后将此功能移到'master',然后与'project2-dev' 。在Visual Studio 2015中,我可以使用'Rebase',但它也会在添加新功能之前添加更改。 将选定的git提交到Visual Studio中的其他分支
有没有办法将选定的提交从'project1-dev'移动到'master',然后与'project2-dev'合并?
您可以轻松地通过保持这项工作从所有三个部门的最佳共同祖先创造了一个新的分支从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
共同祖先。
(如果你只运行$ 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
首先,因为使用的是变基在我假设你没有推任你要去尚未移动变化放在首位,或者您是该项目的唯一一个和意志做一个git push -f
等
无论如何,让我们假设你想短短提交摆脱project1-dev
到master
,但只可以追溯到犯,但就向前的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
如果答案对您的问题有帮助,请考虑接受和/或upvoting。 –