git rev-list HEAD~n 不包括范围内的第一次提交

Jac*_*arf 2 git version-control

我正在使用 git rev-list 以两种不同的方式从存储库中选择提交:

git rev-list --reverse HEAD~<n>..
Run Code Online (Sandbox Code Playgroud)

和 git rev-list --reverse ..

阅读了 git rev-list 手册页后,我知道 .. 相当于 ^,并且这不会包含在所选提交的范围内,但是手册页没有指定如果我想要一个包含范围的提交(即,包括)

我有同样的问题: git rev-list --reverse HEAD~..

这是我想要的规范:

说我有四个提交:

A--B--C--D
Run Code Online (Sandbox Code Playgroud)

我有一个脚本,我提交了两次:

myscript --from B --to D
Run Code Online (Sandbox Code Playgroud)

我想要一个大小为 3 的提交列表:

B, C, D
Run Code Online (Sandbox Code Playgroud)

或者如果我这样做了:

myscript --last 4
Run Code Online (Sandbox Code Playgroud)

我会得到:

A, B, C, D
Run Code Online (Sandbox Code Playgroud)

我提出的解决方案是执行以下操作:

git rev-list --reverse <tag1>~1..<tag2>
Run Code Online (Sandbox Code Playgroud)

或 git rev-list --reverse HEAD~..

但是,如果 n == 提交次数,或者 tag1 是第一次提交,这将不起作用。

任何帮助,将不胜感激。

Jac*_*arf 5

因此,对于 --last N 选项,我发现以下效果非常好:

git rev-list --reverse HEAD -n <n> 
Run Code Online (Sandbox Code Playgroud)

不幸的是,选择包含范围的解决方案并不那么干净:

git rev-list --reverse <tag1>..<tag2> --boundary
Run Code Online (Sandbox Code Playgroud)

这会给你你想要的,但是它会在第一次提交前放一个小破折号(“-”)。不过,这可以通过一些字符串处理来解决。