![](/img/trans.png)
[英]How to rebase an upstream branch to master while keeping the merge histories?
[英]How to rebase a branch to master while keeping the original commit history?
我已经阅读了http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html 。 这是我需要达到的目标:
1>压扁我的开发分支并保持master分支干净
2>通过开发分支保留提交历史记录,以方便检查。
在上面的链接中,作者介绍了将折叠本地master分支的提交历史记录的工作流。 为了归档我的目标,我完成了以下测试工作流程。 但是,我认为有更好的方法可以执行相同的操作。
git branch
# develop
# * master
git lg2
# * 5a8b846 - Fri, 22 Jan 2016 15:16:37 -0600 (31 minutes ago) (develop)
# | Moving license into its own file - Mark
# * 9e8bc03 - Fri, 22 Jan 2016 15:16:05 -0600 (32 minutes ago)
# | Adding license - Mark
# * 8c7b282 - Fri, 22 Jan 2016 15:15:15 -0600 (33 minutes ago)
# | Removing some bad formatting in the README - Mark
# * 3797e5b - Fri, 22 Jan 2016 15:14:39 -0600 (33 minutes ago) (HEAD -> master)
# add README - Mark
git checkout develop
# Switched to branch 'develop'
git checkout -b developRebase
# Switched to a new branch 'developRebase'
git branch
# develop
# * developRebase
# master
git lg2
# * 5a8b846 - Fri, 22 Jan 2016 15:16:37 -0600 (41 minutes ago) (HEAD -> developRebase, develop)
# | Moving license into its own file - Mark
# * 9e8bc03 - Fri, 22 Jan 2016 15:16:05 -0600 (42 minutes ago)
# | Adding license - Mark
# * 8c7b282 - Fri, 22 Jan 2016 15:15:15 -0600 (42 minutes ago)
# | Removing some bad formatting in the README - Mark
# * 3797e5b - Fri, 22 Jan 2016 15:14:39 -0600 (43 minutes ago) (master)
# add README - Mark
git rebase -i master developRebase
# [detached HEAD 04c1710] Removing some bad formatting in the README
# Date: Fri Jan 22 15:15:15 2016 -0600
# 1 file changed, 5 insertions(+), 1 deletion(-)
# Successfully rebased and updated refs/heads/developRebase.
git lg2
# * 04c1710 - Fri, 22 Jan 2016 15:15:15 -0600 (48 minutes ago) (HEAD -> developRebase)
# | Removing some bad formatting in the README - Mark
# | * 5a8b846 - Fri, 22 Jan 2016 15:16:37 -0600 (46 minutes ago) (develop)
# | | Moving license into its own file - Mark
# | * 9e8bc03 - Fri, 22 Jan 2016 15:16:05 -0600 (47 minutes ago)
# | | Adding license - Mark
# | * 8c7b282 - Fri, 22 Jan 2016 15:15:15 -0600 (48 minutes ago)
# |/ Removing some bad formatting in the README - Mark
# * 3797e5b - Fri, 22 Jan 2016 15:14:39 -0600 (48 minutes ago) (master)
# add README - Mark
git checkout master
# Switched to branch 'master'
git merge developRebase
# Updating 3797e5b..04c1710
# Fast-forward
# README | 6 +++++-
# 1 file changed, 5 insertions(+), 1 deletion(-)
git lg2
# * 04c1710 - Fri, 22 Jan 2016 15:15:15 -0600 (49 minutes ago) (HEAD -> master, developRebase)
# | Removing some bad formatting in the README - Mark
# | * 5a8b846 - Fri, 22 Jan 2016 15:16:37 -0600 (47 minutes ago) (develop)
# | | Moving license into its own file - Mark
# | * 9e8bc03 - Fri, 22 Jan 2016 15:16:05 -0600 (48 minutes ago)
# | | Adding license - Mark
# | * 8c7b282 - Fri, 22 Jan 2016 15:15:15 -0600 (49 minutes ago)
# |/ Removing some bad formatting in the README - Mark
# * 3797e5b - Fri, 22 Jan 2016 15:14:39 -0600 (49 minutes ago)
# add README - Mark
git branch -d developRebase
# Deleted branch developRebase (was 04c1710).
git lg2
# * 04c1710 - Fri, 22 Jan 2016 15:15:15 -0600 (49 minutes ago) (HEAD -> master)
# | Removing some bad formatting in the README - Mark
# | * 5a8b846 - Fri, 22 Jan 2016 15:16:37 -0600 (48 minutes ago) (develop)
# | | Moving license into its own file - Mark
# | * 9e8bc03 - Fri, 22 Jan 2016 15:16:05 -0600 (48 minutes ago)
# | | Adding license - Mark
# | * 8c7b282 - Fri, 22 Jan 2016 15:15:15 -0600 (49 minutes ago)
# |/ Removing some bad formatting in the README - Mark
# * 3797e5b - Fri, 22 Jan 2016 15:14:39 -0600 (50 minutes ago)
# add README - Mark
有人可以给我更好的方法来做同样的事情吗?
在步骤2中,
git checkout develop
git checkout -b developRebase
可以在一个电话中完成
# Create a new branch called 'developRebase' based on branch 'develop'
# and immediately check out that new branch:
git checkout develop -b developRebase
在第3步中,您可以缩短
git rebase -i master developRebase
至
git rebase -i master
因为您已经在developRebase
分支developRebase
(已在步骤2的最后进行了检查),并且当前分支是要重新建立基础的分支的默认分支。
除此以外,我认为没有太多改进之处。 您的方法似乎很好。 (我猜对git lg2
和git branch
的许多调用只是说明性的,并且/或者用于检查每个步骤是否产生预期的结果。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.