我正在使用git rev-list以两种不同的方式从回购中提取一系列提交:
git rev-list --reverse HEAD~<n>..
和 git rev-list --reverse ..
阅读了git rev-list联机帮助页,我知道..等同于^,并且这不包括在所选的提交范围内,但是如果我想要的话,手册页没有指定要做什么包含范围的提交(包括)
我遇到同样的问题: git rev-list - 反向HEAD〜..
这是我想要的规范:
说我有四个提交:
A--B--C--D
我有一个脚本,我给了两个提交:
myscript --from B --to D
我想要一个大小为3的提交列表:
B, C, D
或者如果我做了:
myscript --last 4
我会得到:
A, B, C, D
我建议的解决方案是做类似的事情:
git rev-list --reverse <tag1>~1..<tag2>
或 git rev-list - 反向HEAD〜..
但是,如果n ==提交次数,或者tag1是第一次提交,则不起作用。
任何帮助都将不胜感激。
答案 0 :(得分:2)
因此对于--last N选项,我发现以下工作非常好:
git rev-list --reverse HEAD -n <n>
不幸的是,选择包容性范围的解决方案并不是那么干净:
git rev-list --reverse <tag1>..<tag2> --boundary
这将为您提供所需的内容,然而它会在第一次提交前放置一个小破折号(“ - ”)。这可以通过一些字符串处理来解决。
答案 1 :(得分:0)
来自rev-list
手册页:
通过跟踪来自给定提交的父链接可以访问的列表提交,但是排除可以从在它们前面的^给出的提交中提交的提交。 < / p>
要获取包含的提交列表,只需列出由空格分隔的两个引用。您的第一个引用应该使用tilda ~
引用之前的提交,然后排除,使用前导词^
git rev-list --reverse ^<tag1>~ <tag2>
例如:
git log --oneline
071f2c5 (HEAD -> master) D 8b2c3ee C 4f9aa7e B 6296bbd A
git rev-list --reverse ^4f9aa7e~ 071f2c5
4f9aa7e4d421e7cad3113bf92967cb646484ea25 8b2c3eeb38b21b5cf143e9a79c21bf23453eef85 071f2c527712d8d16aede35e1881a07fb55b408f