当前分支顶部的git rebase

时间:2012-11-22 13:53:30

标签: git rebase

我正在尝试针对当前分支的交互式rebase。也就是说,我有一个修正错字的提交,我想在另一个提交之上做一个'fixup'。

有时这很有效。有时,这会给出一个奇怪格式的错误消息,如:

# git rebase -i
You asked me to rebase without telling me which branch you
want to rebase against, and 'branch.myBranchName.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git rebase <upstream branch>').
See git-rebase(1) for details.

If you often rebase against the same branch, you may want to
use something like the following in your configuration file:
    [branch "myBranchName"]
    remote = <nickname>
    merge = <remote-ref>
    rebase = true

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

如果我告诉git对(当前分支)进行rebase的分支失败了:

# git rebase -i myBranchName

(我的编辑打开了'noop',我相信git告诉我'没有op'代替实际的错误信息)。我会编辑并得到:

Successfully rebased and updated refs/heads/myBranchName. 

如何在编辑器中查看当前分支的更改,并将其标记为fixup?

3 个答案:

答案 0 :(得分:4)

git-rebase -i是一个应用于多个提交的操作。

所以,如果你当前的分支是

A-B-C-d

并且你想要,例如,合并A和C提交,你需要运行(给定A是最高提交)

git rebase -i HEAD~3

这意味着“在当前分支上重新设置三个顶级提交”和“从提交HEAD - 3开始”。

答案 1 :(得分:0)

也许你想要git rebase -i --autosquash origin/myBranchName

git-rebase的争论是从哪里开始重写历史的重点。它在当前签出的分支上运行。

答案 2 :(得分:0)

我猜您的情况如下?

-A-B-C----D----(HEAD)
  \----Af

AfA

的fixup-commit

你希望它成为

-(A+Af)-B-C-D--(HEAD)

对于这种情况,我会尝试以下方法:

>> rebase <Af>          # where <Af> is the SHA1 of commit Af

你的历史会变成

-A-Af-B-C-D----(HEAD)

然后

>> rebase -i <A>^       # A^ is the commit that came before A

它可以显示交互式选择/壁球视图,使您可以将AAf压缩在一起。