我在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
,使用HEAD
,git rebase SHA1
(其中 SHA1 , SHA2 等等) git rebase SHA2
),直到我找到最近成功重新定位的点。
我常用的选择候选rebase积分的方法是在每次合并后立即尝试掌握。
是否有一种自动化此过程的好方法?
答案 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