合并两个分支之间的差异到第三个分支中。

10 浏览
0 Comments

合并两个分支之间的差异到第三个分支中。

假设我有两个分支,masternew_feature

我本应该在一个特定的功能上工作,我以为这个功能应该是new_feature的一部分,所以我从new_feature分支上检出了specific_feature分支,就像这样:

git checkout -b specific_feature

现在我在这个specific_feature分支上进行了大量的开发,并多次将upstream/new_feature合并到其中以获取远程的更改。

现在,我知道我的specific_feature应该是从master而不是new_feature分支分出的。(new_feature分支还没有准备好被推送)

有没有办法可以获取我specific_feature分支和new_feature分支之间的差异,并将这些更改应用到一个新的分支上,比如说specific_feature_master(从master分支分出的)?

0
0 Comments

合并两个分支到第三个分支的差异的问题出现的原因是,特定功能分支(specific_feature)中多次合并了新功能分支(new_feature)的代码,导致使用git rebase --onto命令时无法正确地将两个分支的差异合并到master分支。

解决方法是创建一个临时分支tmp,将specific_feature分支重新基于master分支创建,然后将最后一个合并进specific_feature分支的新功能分支的最后一个提交Y合并到新的specific_feature分支中。最后,使用git rebase --onto命令将tmp分支与新功能分支之间的差异合并到specific_feature分支。

具体操作步骤如下:

1. 创建临时分支tmp并切换到specific_feature分支:git checkout -b tmp specific_feature

2. 将specific_feature分支重新基于master分支创建:git checkout -B specific_feature master

3. 将新功能分支最后一个合并进specific_feature分支的提交Y合并到新的specific_feature分支中:git merge $(git merge-base tmp new_feature)

4. 使用git rebase --onto命令将tmp分支与新功能分支之间的差异合并到specific_feature分支:git rebase --onto specific_feature $(git merge-base tmp new_feature) tmp

5. 删除临时分支tmp:git branch -D tmp

经过上述操作,specific_feature分支将包含tmp分支与新功能分支之间的差异,并且与master分支保持一致。

以上是问题的原因和解决方法的详细说明。

0
0 Comments

问题的出现的原因是在两个分支上进行了不同的修改,现在需要将这些修改合并到第三个分支上。解决方法是使用git cherry命令检索在specific_feature分支上进行的提交,并且这些提交在origin/new_feature分支上没有出现。

首先,使用以下命令可以检索到在specific_feature分支上进行的提交,但在origin/new_feature分支上没有出现的提交:

git cherry origin/new_feature specific_feature

然后,可以从master分支上创建一个新的分支,并且将这些提交进行合并:

git checkout -b specific_feature_master master
git cherry origin/new_feature specific_feature | egrep '^+' | awk '{print $2} | xargs git cherry-pick

以上操作将会解决你的问题,但是如果specific_feature和origin/new_feature之间存在依赖关系,版本控制系统是无法解决这个问题的。

最后,进行了一次小的编辑来修复最后一行的错误:

git cherry origin/new_feature specific_feature | egrep '^\+' | awk '{print $2}' | xargs git cherry-pick

0