3

我正在尝试对我当前的分支进行交互式变基。即,我有一个修复错字的提交,我想在另一个提交之上进行“修复”。

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

# 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 分支针对(当前分支)重新设置基准,它会失败并显示:

# git rebase -i myBranchName

(我的编辑器打开'noop',我相信这是git告诉我'no op'代替实际的错误消息)。我会相当编辑并得到:

Successfully rebased and updated refs/heads/myBranchName. 

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

4

3 回答 3

4

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

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

A B C D

例如,您想要合并 A 和 C 提交,您需要运行(假设 A 是最高提交)

git rebase -i HEAD~3

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

于 2012-11-22T13:58:47.737 回答
0

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

git-rebase 的参数是重写历史的起点。它在当前签出的分支上运行。

于 2012-11-22T13:59:06.857 回答
0

我猜你的情况如下?

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

Af作为修复提交A

你想让它变成

-(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

它会向您展示交互式拾取/挤压视图,使您能够一起挤压A和挤压Af

于 2012-11-22T14:15:32.853 回答