假设我有以下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)
答案 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?