我有以下情况:
branch1
创建了新分支master
branch1
中,我添加了一个名为b1.txt
的新文件,还在common.txt
中添加了新行echo 'line added in branch1';
。branch2
创建了新分支branch1
b1.txt
中也将文件b2.txt
重命名为common.txt
+,我将该行更改为echo 'line added in branch2';
。branch1
合并到master
branch2
合并到master
结果:master
有1个新文件b2.txt
,并且common.txt
中有一行新行,其内容为echo 'line added in branch2';
。
我想要得到的结果:master
有2个新文件b1.txt
和b2.txt
,在{{1}中有2行}读取common.txt
和echo 'line added in branch1';
。
如何实现?
注意:我知道,通常我应该从echo 'line added in branch2';
创建branch2
,但复制粘贴(并稍加修改){{ 1}},尽管master
尚未合并到branch1
。
答案 0 :(得分:2)
您可以从branch2
创建branch1
以使用更改的文件,然后使用branch2
使master
指向git reset
:
git checkout master
git checkout -b branch1
* make changes and commit *
git checkout -b branch2
git reset --soft master
* make changes and commit *
这时,两个分支都有各自的更改和独立的历史记录(直到master
),从而很容易与git merge branch1 branch2
合并成master。
答案 1 :(得分:1)
以您的情况为例:不要更改,而是添加。
因此,在branch2中,复制而不是重命名b1.txt。 并将该行添加到common.txt。
那么您将不需要合并branch1,只需合并branch2。但是您当然可以没有负面影响,例如branch1中有更多更改。
答案 2 :(得分:1)
branch1中的提交也存在于branch2中,因此两个分支的合并将导致branch2本身,其中包括branch1。
原因是,在导致分支2的修改的历史记录中,您对分支1进行了所有更改,即工作树由这些修改定义:
b1.txt
,然后在"line added in branch1"
中写入common.txt
b1.txt
,创建b2.txt
,然后在"branch1"
中用"branch2"
更改common.txt
您需要重写branch2的历史记录,以便使用以下更改集将两个提交合并为一个提交:
b2.txt
,然后在"line added in branch2"
中写入common.txt
要获得此权限,您必须变基 branch2
并压扁提交。请参考手册页中的git-rebase来学习如何做。或者,如果branch2中仅包含一个提交,则您可以重新提交从master
而不是branch1
开始的当前工作树。通过branch2
使用干净的工作树和索引来完成此操作,
git reset --soft master
git commit
然后,您可以将分支1和分支2合并到master(或彼此)中,并获得所需的结果
答案 3 :(得分:0)
将branch2
塞入branch1
然后到master
怎么样?