对不好的英语抱歉,让我用一个简单的例子来解释。
假设我有一个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
,这些内容应添加到v1
和master
echo "common" >> asdf
git commit -am"add common in v2"
现在,问一下,如何对v1
和master
进行这些更改?
如果我签出v1并合并v2,v2-only
内容也会被合并,这不是我想要的。
这是一个简单的例子,现实世界的问题是我们有一个基本源代码,并使用该基本代码创建了许多特定于供应商的特定分支。我们如何在branch01
中引入一个有许多提交合并到其他分支的功能?
答案 0 :(得分:0)
你有两个选择。
首先,如果这件事刚刚发生且add common in v2
是v2
上的最后一次提交,最简单的方法就是重置提交,
git reset HEAD~1
您可以添加--soft
以保持更改暂存
git reset HEAD~1 --soft
签出您希望进行这些更改的分支
git checkout master
并进行新的提交。但请记住,您必须重写提交消息。
作为奖励,如果您希望再次提交v1
和v2
,请使用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
,但这是它自己的怪物。