我如何自动确定最佳提交进行交互式变基?

3
我经常使用“fixup!”,“squash!”和“rebase -i”来清理、纠正或修改最近未推送的历史记录。我想找到一种方式,让Git自动选择最合适的提交用于交互式变基,这样我就可以定义一个别名来快速进行交互式变基。
在这种情况下,我认为最好的提交是最近的祖先提交之一:
- 出现在任何其他分支(本地或远程)中 - 有多个父节点 - 没有父节点
第一个条件确保我不会重写可能影响他人的提交。第二个条件确保我不会试图通过合并进行变基,这绝对不是我想要的。第三个条件只是一个健全性检查。
那么问题是,我如何使用Git找到那个提交?
2个回答

1

也许不完全符合您的需求,但是在没有指定起点的情况下调用git rebase将使rebase从上游分支开始,这在大多数情况下是一个完美的选择。进一步的rebasing会导致重写已发布的历史记录,这绝不是一个好主意。


不错的提示,但我应该指出这是在Git 1.7.6中新增的功能。在1.7.0和1.7.5之间的版本中,您可以使用git rebase -i @{upstream}git rebase -i @{u}来完成相同的操作。 - Parker Coates

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 就可以完成此操作,这将是很好的。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接