因此,情况是,我们的团队有分支机构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
答案 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
。