在两个分支之间合并时如何不丢失代码?

时间:2019-04-08 06:30:15

标签: git

因此,情况是,我们的团队有分支机构dev,我们将其拆分以处理各种问题。有时这需要我们在同一文件中但在不同分支中进行工作。

user1(file1.txt)   X
                  / \
dev(file1.txt) - A - B - C
                  \       \  
user2(file1.txt)   A' ---- B'

问题在于,当我们将user2(B')合并到dev(C)中时,它倾向于覆盖在提交BC中所做的任何更改,如果我们先尝试将C合并到B',然后再将user2合并,则会发生相同的情况进入开发。

例如,如果在dev(B)中添加了“ this is commit B”行,则在user2(B')和dev(C)之间合并时,该行消失了。当我们尝试在提交B'之前存储更改并与dev(C)合并然后重新应用更改时,会发生同样的事情。

有没有一种方法可以手动控制合并期间要进行的更改,以便我们只能合并我们知道的更改?

基本上我们当前要做的是,当遇到此问题时,将更改复制到一侧,从dev创建一个新分支,放回更改,然后将这些更改合并回dev,但是我知道有一种更明智的处理方式。

Graph Log
* | | | | | | |   971fa0e Merge branch 'p' into 'dev'
|\ \ \ \ \ \ \ \
| |_|_|_|_|_|_|/
|/| | | | | | |
| * | | | | | |   dcb98ea Merge branch 'dev' into 'p'
| |\ \ \ \ \ \ \
| | | |_|_|_|_|/
| | |/| | | | |
| * | | | | | | d6fd278
| * | | | | | | 9d47bd7
| * | | | | | | 11560e7
| | |_|/ / / /
| |/| | | | |
* | | | | | | ace54f1

1 个答案:

答案 0 :(得分:0)

看看您的图表如何(之后似乎还有很多事情),我想说最好的是从p重新创建一个新的分支dev,然后git cherry-pick d6fd278 9d47bd7 11560e7将您的提交返回分支(以及您在p中需要的所有其他提交)。 您最终将如下:

* new commit for 11560e7 <p>
* new commit for 9d47bd7
* new commit for d6fd278
* <dev>

然后,当分支准备好进入开发时,您将其合并:

git checkout dev
git merge --no-ff p

最后删除分支p