2

有没有办法编写将分支合并回其父级的别名?我知道我可以做到:

git checkout - && git merge -

但它只适用于我以前的分支是父分支的简单情况。据我所知,git 不会跟踪此类信息,因为那里没有分支。但我希望它已经实现为插件或钩子集。
提前致谢。

4

2 回答 2

1

这样的别名将涉及首先找到“父”分支。

这不是微不足道的,“找到一个分支的父分支”这个问题有一些很好的解决方案。

Git 的历史基于提交的DAG。分支(和一般的“引用”)只是指向不断增长的提交 DAG 中特定提交的临时标签。
因此,分支之间的关系会随着时间而变化,但提交之间的关系不会

一旦有了父分支的名称,就可以在别名中使用它。

于 2014-06-25T09:11:59.507 回答
1

正如 VonC 所说,我首先需要做的是找到当前分支的父级。以下脚本主要满足我的需要:

git branch | grep -v '*'|xargs -I{} sh -c ' printf "{}:"; git log --oneline `git merge-base "$(git rev-parse --abbrev-ref HEAD)" "{}"` | wc -l' | sort -t: -k +2n | tail -n 1 | sed 's/:.*//' 

它能做什么:

  • 对于每个分支找到与当前分支的合并基础
  • 找到 branch:log-length 对最大化 log-length
  • 提取分支名称

之后,只需要签出它并将前一个头合并到其中:

git checkout $parent_branch && git merge -

PS:我没有在大型存储库上对其进行测试,如果存在当前分支的分支,它的行为可能会令人惊讶。它需要修复。

于 2014-06-26T07:43:04.840 回答