如何合并或插入某些提交到其他分支?

时间:2018-02-01 07:09:48

标签: git

假设我有以下git结构

1--2--3--11--12 (master-branch)
       \
        4--5--6--7--8--9--10--13--14 (custom-branch)

如何进入以下git结构?

1--2--3--4--11--12 (master-branch)
          \
           5--6--7--8--9--10--13--14 (custom-branch)

2 个答案:

答案 0 :(得分:4)

只需将master上的custom-branch重新绑定到4提交:

git checkout master
git rebase custom-branch~8

通过检查,你想要做的就是让1--2--3--4成为两个分支的新共同基础。

答案 1 :(得分:1)

如果这些提交已经被推送到远程,我只想将commit 4合并到master。

git checkout master
git merge <4-commit-id-here>

但这不是你要求的,所以你能做的就是在主人身上挑选你想要的提交:

git checkout master
git cherry-pick <4-commit-id-here>

然后,如果这些只是本地分支,或者您完全确定要在远程重写历史记录,则可以使用 git rebase interactive 重新排序提交:

git rebase -i HEAD~4

Rebase interactive会显示您可以重新排序的提交列表。

重新排序主数据后,你有了提交4的新提交ID。所以你需要在其上重新定义自定义分支:

git checkout custom-branch
git rebase <new-commit4-id-here>

默认情况下,Rebase应该忽略自定义分支中的旧提交4,因为它不会在新提交4之前引入任何新的更改。所以就是这样。

如果您的更改已经在遥控器上,则需要强制推送(假设您已经对两个分支进行了跟踪)。

首先推送自定义分支:     git push -f

然后推送主分支:

git checkout master
git push -f

但通常应避免重写遥控器上的历史记录。更多关于此事在这里: How do I properly force a Git push?