如何正确使用git rebase?

时间:2013-01-03 10:30:38

标签: git version-control rebase git-merge git-rebase

我目前以下列方式使用git:

  1. clone,fetch repo
  2. 为特定问题创建主题分支
  3. 做一些提交
  4. 结帐主分行
  5. 将主题分支合并到主人
  6. 推新主分会
  7. 不幸的是,这时不时会变得混乱。我想要做的是将一些较小的提交合并为一个较大的提交。

    有时候,将新分支中的所有提交合并到一个提交并将其合并到master中是个好主意。

    示例:

    git branch update-docs
    git checkout update-docs
    git add -A .
    git commit -m 'updated networking doc'
    git add -A .
    git commit -m 'updated manager doc'
    git checkout master
    git merge update-docs
    

    如您所知,我将在主分支“更新的网络文档”和“更新的管理员文档”中进行两次提交。

    如果我现在只想在master分支中有一个名为“updated docs”的提交,例如包含这两个提交的更改,我该怎么办?

    我认为你必须使用git rebase来完成这类任务。我只是不知道如何使用它。

    我已经尝试过:

    git checkout master
    git rebase update-docs
    

    但是将更改合并到master而不留下任何提交,现在repo搞砸了。

    那么有人会分享你必须使用的命令吗?

    解决方案:

    git checkout -b update-readme
    git commit -am 'rewritten readme'
    git commit -am 'added author name'
    git rebase -i master
    

    打开文本编辑器:

    pick 6dbcbf1 rewritten readme
    pick b815bbf added author name
    

    现在您将其更改为:

    pick 6dbcbf1 rewritten readme
    squash b815bbf added author name
    

    然后用“:w”和“:q”保存,如果使用vim,它将打开另一个编辑器,您可以在其中定义新的提交名称

    rewritten readme
    

    然后你合并了回购:

    git checkout master
    git merge update-readme
    

1 个答案:

答案 0 :(得分:4)

git merge update-docs后,执行git rebase -i origin/master。这会弹出一个interactive rebase editor,允许您squash commitsrearrange them