我想在给定提交的所有子提交上运行git filter-branch
。这似乎不是一项容易的任务,因为没有办法告诉git rev-list
仅返回特定提交的子提交。使用..语法是不可行的,因为它还会包括该范围内任何合并的父提交。我错过了什么吗?
编辑
为了澄清:我有一个名为base
的分支,已多次合并到derivative
中。我想列出并最终在仅从最近提交派生的提交上运行filter-branch
。我还想列出其他分支上类似的提交。
(简化后的)情况如下图所示(derivative
是左侧的分支):
$ git rev-list --graph --oneline base derivative
* f16fd151b374b2aeec8b9247489c518a6347d001 merged in the latest from the base branch
|\
| * 564d795afb63eab4ffe758dbcd726ca8b790f9f6 spelling correction
* | 2f2ed5f1d429492e1491740e30be5a58ec20af21 snogg before flarg
|\ \
| |/
| * 0c520ea33ef57b30846b122781d41fcef5e62f9b now with added flarg
* | 5068c34c3862856f511b6b4d48f2adb766e1bde4 now with added snogg
|/
* b51f227e931f830cbda042bc372087398ae7e50d initial commit
@araqnid的建议似乎不起作用,除非我没有正确阅读它:
$ git rev-list --oneline derivative --not base
f16fd151b374b2aeec8b9247489c518a6347d001 merged in the latest from the base branch
2f2ed5f1d429492e1491740e30be5a58ec20af21 snogg before flarg
5068c34c3862856f511b6b4d48f2adb766e1bde4 now with added snogg
这将显示derivative
中除base
之外的所有提交。这有点说得通,因为它只是删除了否定提交的祖先。我想它只显示第一行。
git for-each-ref refs/heads/\*
不包括斜杠/
在分支名中的分支名称。 - hraban