如何使一个分支中引入的功能合并到其他分支?

时间:2018-03-08 05:36:01

标签: git

对不好的英语抱歉,让我用一个简单的例子来解释。

假设我有一个master分支,以及一个包含内容的asdf文件:

master

然后我从v1创建了master分支,并添加了一些v1内容

git checkout -b v1
echo "v1" >> asdf
git commit -am"v1"

然后从v2创建v1,只添加一些v2内容

git checkout -b v2
echo "v2-only" >> asdf
git commit -am"v2-only"

然后将一些内容添加到v2,这些内容应添加到v1master

echo "common" >> asdf
git commit -am"add common in v2"

现在,问一下,如何对v1master进行这些更改?

如果我签出v1并合并v2,v2-only内容也会被合并,这不是我想要的。

这是一个简单的例子,现实世界的问题是我们有一个基本源代码,并使用该基本代码创建了许多特定于供应商的特定分支。我们如何在branch01中引入一个有许多提交合并到其他分支的功能?

1 个答案:

答案 0 :(得分:0)

你有两个选择。

首先,如果这件事刚刚发生且add common in v2v2上的最后一次提交,最简单的方法就是重置提交,

git reset HEAD~1

您可以添加--soft以保持更改暂存

git reset HEAD~1 --soft

签出您希望进行这些更改的分支

git checkout master

并进行新的提交。但请记住,您必须重写提交消息。

作为奖励,如果您希望再次提交v1v2,请使用rebase。

git checkout v1
git rebase master
git checkout v2
git rebase master

现在,如果提交不是最后一次提交,您需要选择它。为此,您需要提交的SHA。有不同的方法可以实现这一点,但让我们在这里使用git log。

git log

SHA是每次提交的长号。

现在,结账大师。

git checkout master

樱桃选择提交。

git cherry-pick (your-sha)

Cherry pick不会删除提交表单分支v2。如果你想要这个,你需要调查git rebase -i,但这是它自己的怪物。