概括
在当前分支中查找也包含在任何其他分支中的最新提交的最快方法是什么?
奖励:该技术能否允许上述问题中的“任何其他分支”成为“任何其他远程分支”或“任何其他本地分支”?
背景
我喜欢使用git rebase -i
. 我的主要用例是在推送到远程之前重新组织提交。因此,我经常这样做git rebase -i origin/master
。因此,我为该操作设置了一个别名,称为git rewrite
.
问题是我并不总是想针对origin/master
. 例如,我可能正在一个分支上工作,而是想要git rewrite
做git rebase -i origin/branch
. 或者我可能正在当地的分支机构工作并git rewrite
想做git rebase -i localbranch
.
所以实际上,我正在尝试让我的git rewrite
脚本执行以下操作:“从包含在任何其他分支中的最后一次提交中进行交互式变基”。我想出的是:(仅适用于查找远程分支)
#!/bin/bash
# Do a git rebase -i from the most recent common point between the
# current branch and any other remote branch.
# We go backwards in the branch's history and for each commit check if
# that commit is present in one of the remote branches. As soon as we
# find one that is, we stop and rebase on that.
commit=$(git rev-parse HEAD)
while [ true ]; do
branch=$(git branch -r --contains $commit)
if [ -n "$branch" ]; then
# This commit exists in another remote branch!
break
fi
# OK, let's try the previous commit
commit=$(git log --pretty=%P -n 1 $commit)
# Stupid heuristic, take only first commit if multiple parents
commit=${commit%% *}
done
git rebase -i $commit
这种方法的问题是它很慢。这也有点不准确,因为当提交有多个父级时,它只跟随一个父级。
有谁知道这样做更好/更快/更清洁的方式?