GIT:将branch1和branch2合并到master中,而不会覆盖

时间:2018-07-04 12:52:38

标签: git

我有以下情况:

  1. branch1创建了新分支master
  2. branch1中,我添加了一个名为b1.txt的新文件,还在common.txt中添加了新行echo 'line added in branch1';
  3. branch2创建了新分支branch1
  4. b1.txt中也将文件b2.txt重命名为common.txt +,我将该行更改为echo 'line added in branch2';
  5. branch1合并到master
  6. branch2合并到master

结果master有1个新文件b2.txt,并且common.txt中有一行新行,其内容为echo 'line added in branch2';

我想要得到的结果master有2个新文件b1.txtb2.txt,在{{1}中有2行}读取common.txtecho 'line added in branch1';

如何实现?

注意:我知道,通常我应该从echo 'line added in branch2';创建branch2,但复制粘贴(并稍加修改){{ 1}},尽管master尚未合并到branch1

4 个答案:

答案 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进行了所有更改,即工作树由这些修改定义:

  • (从分支1提交1)从master开始,创建文件b1.txt,然后在"line added in branch1"中写入common.txt
  • (从分支2提交2)从分支1开始,删除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怎么样?

  • git checkout a(您将切换到分支)
  • git merge b(这会将分支b中的所有更改合并到分支a中)
  • git commit -a(这将提交您的更改)
  • git checkout master(您将切换到分支b)
  • git merge a(这会将分支a中的所有更改合并到master中)