我经常使用“fixup!”,“壁球!”和“rebase -i”清理,纠正或者只是摆弄最近的,未被发现的历史。我想找到一种方法让Git自动选择哪个提交对交互式变基最有意义,这样我就可以定义一个别名来进行快速交互式rebase。
我认为在这种情况下最好的提交将是最近的祖先:
第一个条件确保我不会重写可能影响其他人的提交。第二个确保我不会尝试“通过”合并,这绝对不是我想要的。第三个是健全检查。
所以问题是,我如何使用Git找到提交?
答案 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
来做这件事会很好。)