git rebase尽可能接近HEAD?

时间:2016-03-08 12:35:04

标签: git rebase

我在git中有一个私人分支,我暂时没有碰过。我想在find()之上重新定位它,所以我:

master

哦不,我不能直接转向git checkout master git pull git checkout my-branch git rebase master First, rewinding head to replay your work on top of it... Applying: a bunch of stuff Applying: more stuff Applying: and so on CONFLICT (content): Merge conflict in src/foo.c error: Failed to merge in the changes.

HEAD

此时我通常做的是尝试"棘轮"我的分支尽可能接近git rebase --abort # sigh ,使用HEADgit rebase SHA1(其中 SHA1 SHA2 等等) git rebase SHA2),直到我找到最近成功重新定位的点。

我常用的选择候选rebase积分的方法是在每次合并后立即尝试掌握。

是否有一种自动化此过程的好方法?

1 个答案:

答案 0 :(得分:0)

我不相信Git拥有你想要开箱即用的东西。

但是,您可以使用脚本和Git别名来创建一种"模糊的rebase"命令。这将尝试反对另一个参考,如果它失败将走上它的后代的树,直到它找到一个可以干净地反对的参考。

这是一个perl脚本:

#!/usr/bin/perl -w

# get ref
my $ref=shift @ARGV;
if (!defined $ref) {
    warn "need ref to rebase against!\n";
    exit 1;
}

# attempt rebase
`git rebase $ref 2>&1`;

# detect if conflict occurred
# if so, abort the rebase
# and try again with the rebase target's parent
my @result = `git ls-files --unmerged`;
if (scalar @result > 0) {
    print "failed at $ref\n";
    `git rebase --abort 2>&1`;
    system("$0 $ref~");
} else {
    print "done at $ref\n";
}

让我们说你在~/scripts/fuzzyRebase.pl有这个。定义一个像这样的Git别名:

git config --global alias.fuzzyRebase !/~/scripts/fuzzyRebase.pl

现在,无论何时想要调用模糊rebase,都可以使用:

git fuzzyRebase master