3 回答
TA贡献1859条经验 获得超6个赞
---o---1 foo \ 2---3---o bar \ 4 \ 5---6 baz
baz
bar
bar
?
---o---1 foo \ 2---3 \ 4 \ 5---6 baz
baz
foo
baz
4
?
---o---1 foo \ 2---3 \ 4 quux \ 5---6 baz
baz
quux
6
3
3
6
bar
quux
对于所有推送提交的祖先(不包括当前的 发展(以及它的祖先),它们目前的尖端是 发展作为家长:
至少存在一次这样的提交吗? 所有这些提交都是单亲提交吗?
pushedrev=...basename=developif ! baserev="$(git rev-parse --verify refs/heads/"$basename" 2>/dev/null)"; then echo "'$basename' is missing, call for help!" exit 1fiparents_of_children_of_base="$( git rev-list --pretty=tformat:%P "$pushedrev" --not "$baserev" | grep -F "$baserev" )"case ",$parents_of_children_of_base" in ,) echo "must descend from tip of '$basename'" exit 1 ;; ,*\ *) echo "must not merge tip of '$basename' (rebase instead)" exit 1 ;; ,*) exit 0 ;;esac
A master \ \ o-----J \ / \ \ | o---K---L \ |/ C--------------D develop \ |\ F---G---H | F'--G'--H' | |\ | | o---o---o---N \ \ \ \ \ \ o---o---P \ \ R---S
H
S
H'
, J
, K
N
L
P
L
P
对于所有推送提交的祖先(不包括当前的 发展(及其祖先):
有与父母双方的承诺吗? 如果没有,是否至少有一个这样的提交具有当前提示 发展
它(仅)父母?
pushedrev=...basename=developif ! baserev="$(git rev-parse --verify refs/heads/"$basename" 2>/dev/null)"; then echo "'$basename' is missing, call for help!" exit 1fiparents_of_commits_beyond_base="$( git rev-list --pretty=tformat:%P "$pushedrev" --not "$baserev" | grep -v '^commit ' )"case "$parents_of_commits_beyond_base" in *\ *) echo "must not push merge commits (rebase instead)" exit 1 ;; *"$baserev"*) exit 0 ;; *) echo "must descend from tip of '$basename'" exit 1 ;;esac
TA贡献2003条经验 获得超2个赞
重新措辞
解决方案
git show-branch -a \ | grep '\*' \ | grep -v `git rev-parse --abbrev-ref HEAD` \ | head -n1 \ | sed 's/.*\[\(.*\)\].*/\1/' \ | sed 's/[\^~].*//'
下面是它的工作原理:
显示所有提交的文本历史记录,包括远程分支。 当前提交的祖先由恒星指示。过滤掉其他的一切。 忽略当前分支中的所有提交。 第一个结果是最近的祖先分支。忽略其他结果。 分支名称显示在[括号中]。忽略括号之外的所有内容和括号。 有时,分支名称将包含一个~#或^#,以指示在引用的提交和分支提示之间提交了多少次。我们不在乎。别理他们。
结果
A---B---D <-master \ \ C---E---I <-develop \ \ F---G---H <-topic
develop
master
- 3 回答
- 0 关注
- 2780 浏览
添加回答
举报