我正在一个项目上,我提交了我的第一个请求请求,而在等待期间,我想从仍在进行的合并工作中继续构建我的项目。现在我有:
*master
user_story_1
user_story_1
有一个打开请求请求。
现在,我正在尝试创建一个新分支user_story_2
,以继续我在的工作user_story_1
。如何在Git中做到这一点而又不陷入任何冲突或影响我的待处理合并?
我正在一个项目上,我提交了我的第一个请求请求,而在等待期间,我想从仍在进行的合并工作中继续构建我的项目。现在我有:
*master
user_story_1
user_story_1
有一个打开请求请求。
现在,我正在尝试创建一个新分支user_story_2
,以继续我在的工作user_story_1
。如何在Git中做到这一点而又不陷入任何冲突或影响我的待处理合并?
Answers:
我假设您要user_story_2
在中完成的工作之上开始新的分支user_story_1
。这是我在这种情况下使用的工作流程:
开启以下请求user_story_1
:
* (user_story_1)
*
/
* (master)
*
*
user_story_2
根据以下内容创建新分支user_story_1
:
$ git checkout -b user_story_2 user_story_1
* (user_story_1, user_story_2)
*
/
* (master)
*
*
在新分支上工作:
* (user_story_2)
*
* (user_story_1)
*
/
* (master)
*
*
拉取请求被合并:
* (user_story_2)
*
* | (master)
|\|
| * (user_story_1)
| *
|/
*
*
*
删除旧分支:
* (user_story_2)
*
* | (master)
|\|
| *
| *
|/
*
*
*
将新分支改组为master
:
* (user_story_2)
*
/
* (master)
|\
| *
| *
|/
*
*
*
user_story_2
到master
:git rebase --onto master user_story_1 user_story_2
-可能会导致冲突,如果两个分支并不是完全独立的。
git rebase -i master
,它应该显示一个提交清单,user_story_2
包括来自的早期提交user_story_1
。pick
从中删除提交行user_story_1
,并完成变基。
user_story_1
已被合并(并且可能已删除),所以您需要在user_story_2
上进行基础调整master
。这是相同的原则:master
现在包含所有在user_story_1
(加上合并提交),因此,实际上就像在user_story_1
添加另一个提交之后重新建立基础一样。Git中的分支只是对提交的引用(认为是指针),因此,在基于分支的基础上,您仅将提交重新应用于新的基本提交(该基本分支引用的提交)。
我的首选工作流程是:
git checkout -b user_story_1
。user_story_1
。user_story_1
。user_story_1
,git checkout -b user_story_2
。user_story_2
。user_story_1
合并到master中,请切换至user_story_2
do git rebase -i master
。user_story_2
要包含在基准库中的提交列表。删除来自的前几个提交user_story_1
。user_story_2
基于master重新建立了基础,并且只有其提交。为您的每个故事/功能从master创建一个新分支。
在合并每个分支之前,要么将master合并到该分支中,要么将您的分支重新部署到master上。后者是我的偏爱,但最终结果是相同的。
您将遇到冲突,没有解决办法。但是,您想解决分支中的冲突;不掌握。这样,您可以在解决冲突之后测试分支,然后再将其合并到主分支中。