【发布时间】:2014-06-25 09:06:11
【问题描述】:
有没有办法编写将分支合并回其父级的别名?我知道我能做到:
git checkout - && git merge -
但它只适用于我之前的分支是父分支的简单情况。
据我所知,git 不会跟踪此类信息,因为那里没有分支。但我希望它已经实现为插件或钩子集。
提前致谢。
【问题讨论】:
有没有办法编写将分支合并回其父级的别名?我知道我能做到:
git checkout - && git merge -
但它只适用于我之前的分支是父分支的简单情况。
据我所知,git 不会跟踪此类信息,因为那里没有分支。但我希望它已经实现为插件或钩子集。
提前致谢。
【问题讨论】:
这样的别名需要首先找到“父”分支。
这不是小事,“Find the parent branch of a branch”这个问题有一些很好的解决方案。
Git 的历史记录基于 DAG 的提交。分支(以及一般的“引用”)只是指向不断增长的提交 DAG 中特定提交的临时标签。
因此,分支之间的关系可能会随着时间而变化,但提交之间的关系不会。
一旦有了父分支的名称,就可以在别名中使用它。
【讨论】:
正如 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:我没有在大型存储库上测试它,如果存在当前分支的分支,它的行为可能会令人惊讶。它需要修复。
【讨论】: