如何自动确定交互式rebase的最佳提交?

时间:2012-12-20 14:31:48

标签: git git-rebase git-interactive-rebase

我经常使用“fixup!”,“壁球!”和“rebase -i”清理,纠正或者只是摆弄最近的,未被发现的历史。我想找到一种方法让Git自动选择哪个提交对交互式变基最有意义,这样我就可以定义一个别名来进行快速交互式rebase。

我认为在这种情况下最好的提交将是最近的祖先:

  • 出现在任何其他分支(本地或远程)
  • 有多个父母
  • 没有父母

第一个条件确保我不会重写可能影响其他人的提交。第二个确保我不会尝试“通过”合并,这绝对不是我想要的。第三个是健全检查。

所以问题是,我如何使用Git找到提交?

2 个答案:

答案 0 :(得分:1)

不完全是你想要的,但是在没有给出起点的情况下调用git rebase会使rebase从上游分支开始,这在大多数情况下是完美的选择。进一步重新定位会导致您重写已发布的历史记录,这绝不是一个好主意。

答案 1 :(得分:0)

所以它并不漂亮,但这就是我想出来的。

#! /bin/sh

commit=$(git rev-parse HEAD)

while [ "$(git log --format="%p" -1 $commit | wc -w)" -eq 1 ] \
      && [ "$(git branch --all --contains $commit | wc -l)" -eq 1 ]
do
    commit=$(git rev-parse "$commit^")
done

echo $commit

我确信有一种更简单,更强大的方法来实现这一目标,但它似乎做了我想要的。建议和改进非常受欢迎。 (例如,使用Git管道而不是依赖wc来做这件事会很好。)