如何让git将分支合并回父级

时间:2014-06-25 09:06:11

标签: githooks git-alias

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

git checkout - && git merge -

但它仅适用于我之前的分支是父分支的简单情况。 据我所知,git没有跟踪这种信息,因为那里没有分支。但我希望它已经实现为插件或挂钩 提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

这不是一件轻而易举的问题" Find the parent branch of a branch"有一些很好的解决方案。

  

Git的历史记录基于DAG提交。分支(以及一般的“refs”)只是瞬态标签,指向不断增长的提交DAG中的特定提交。
  因此,分支之间的关系可能会随着时间的推移而变化,但提交之间的关系不会

获得父分支的名称后,就可以在别名中使用它。

答案 1 :(得分: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/:.*//' 

它的作用:

  • 为每个分支找到与当前分支的合并基础
  • 查找分支:日志长度对最大化日志长度
  • 提取分支名称

之后只需要结帐并将之前的头合并到其中:

git checkout $parent_branch && git merge -

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