我正在为我的团队编写一个工具,以帮助自动转发提交到未来"分支机构,我想要检测的一件事是合并是否是通过' -s our'完成的。我计划将这些类型的转发与其他合并区别对待,因为它们代表了不转发提交的选择。
有没有任何编程方式来检测这个?
我能想到的最好的事情是检查是否
git diff REF^1 REF
是空的。
答案 0 :(得分:2)
你最好的事情"是要做的事情。您无法从字面上判断合并是否以这种方式完成(没有记录所使用的策略选项),但最终,无论是否有人这样做,结果都是一样的:
git merge --no-commit otherbranch
git checkout HEAD -- .
git commit
或:
git merge --no-commit otherbranch
vi foo.c # and remove all otherbranch's changes
git commit
或其他什么。
当然,仅仅因为没有从其他分支引入任何更改并不意味着其他分支的更改被丢弃。例如,可能的是,其他分支中的所有更改都以其他方式进入了分支机构的代码。但这可能非常罕见。
答案 1 :(得分:0)
要有效地识别所有--s ours
批量合并,一次用于整个存储库,
git log --all --merges --pretty='%h:%x0a%h^: %h' \
| git cat-file --batch-check='%(objectname) %(rest)' \
| awk '{tree=$1} getline && tree==$1 { print $2 }
并验证它列出的内容,请检查 git rev-parse x: x^:
是否对同一棵树说了两次。
在整个 linux 历史上这样做需要 8 秒热缓存,36 秒在普通消费者硬盘上完全冷。