我知道这里有非常相似的问题,但它们并没有解决我的问题.也许有些东西我不太了解.
这是fitnesse(https://github.com/unclebob/fitnesse/)的提交历史的一部分:
* | | | | | | | | | | | | | | | fa86be8 Avoid possible issue when using CachingPage under heavy memory load.
|/ / / / / / / / / / / / / / /
* | | | | | | | | | | | | | | 7b4a07a Merge pull request #256 from barredijkstra/fitnesse_issue_250
|\ \ \ \ \ \ \ \ \ \ \ \ \ \ \
| * | | | | | | | | | | | | | | ecf5891 Fixed test checking for OS specific exception message.
| * | | | | | | | | | | | | | | 082236e Added rendering of cause exceptions. Fix for unclebob/fitnesse#250
* | | | | | | | | | | | | | | | a92b37f Merge pull request #243 from amolenaar/fix/243-hash-table-rendering
Run Code Online (Sandbox Code Playgroud)
我想要2个提交哈希之间的提交列表.在这种特殊情况下,我想之间的提交ecf5891和7b4a07a,我希望得到的结果是:
ecf5891
7b4a07a
Run Code Online (Sandbox Code Playgroud)
我一直在使用Si git rev-list commit_hash_from_here^..commit_hash_up_to_here,它在线性历史上运行良好.但是,在这种情况下,我得到了更多的提交.
我试过这个,它的工作原理与预期一样:
git log --since='<date ecf5891>' --until='<date 7b4a07a>'
Run Code Online (Sandbox Code Playgroud)
(我手动搜索了这2个日期).
一个可能的解决方案是获得2个日期并且就这样做,但我认为应该有更好的方法.
编辑:
7b4a07a父母是ecf5891和a92b37f.到目前为止,该解决方案正常工作,如果我想从去ecf5891到7b4a07a,但如果我想从去a92b37f到7b4a07a我想:
7b4a07a
ecf5891
082236e
a92b37f
Run Code Online (Sandbox Code Playgroud)
但我没有 a92b37f
tor*_*rek 32
当谈到git提交时,"Between"是一个有点滑的概念.
上面显示的文本,带有一个图形输出片段,显示为什么from^..to产生的不仅仅是那两个提交:该to部分是合并提交.
符号A..B实际上只是简写B ^A.也就是说,"一切从开始B和向后工作,减去从开始A和向后工作的一切".但是B是合并提交,所以"从那里开始并向后工作的所有东西"都使用父母.
这里的第一个父母7b4a07a是a92b37f(不在您的[原始]片段上面,但我克隆了链接的回购并找到了它).我们可以象征性地引用它,我将在下面.第二个父母7b4a07a是ecf5891你感兴趣的"来自"部分.
当你要求:
ecf5891^..7b4a07a
Run Code Online (Sandbox Code Playgroud)
这意味着:
7b4a07a ^ecf5891^
Run Code Online (Sandbox Code Playgroud)
这与:
7b4a07a ^082236e
Run Code Online (Sandbox Code Playgroud)
它让你的父母合并,然后从082236e后面修剪一切.你需要从7b4a07a^第一个父母和后面修剪掉所有东西:
git rev-list 7b4a07a ^ecf5891^ ^7b4a07a^
git log --oneline 7b4a07a ^ecf5891^ ^7b4a07a^
Run Code Online (Sandbox Code Playgroud)
但是,一般来说,你必须弄清楚要切断哪些后代线.
编辑:你可以坚持使用A..B符号,但你需要添加额外的"排除".所以,一旦你将帽子移到前面,jthill的答案也会起作用.
重新您的编辑("如果我想从去a92b37f到7b4a07a"):我们又回到的'之间’这个问题是一个光滑的概念.哪些提交是"之间"?有从直线a92b37f到7b4a07a,因为a92b37f是父母双方的合并提交的一个7b4a07a.因此,通过早期的逻辑("直接在祖先线上提交",也许是"包含"),这两个提交中只有一个或两个提交.但是你说你想要两个在任何祖先意义上都不相关的提交a92b37f. 为什么你想要那两个特定的提交?是什么让082236e"有趣"和082236e^它的父母"无趣"?
aqu*_*tae 28
在你的情况下,我认为你正在寻找--ancestry-path:
git rev-list --ancestry-path 7b4a07a..ecf5891
Run Code Online (Sandbox Code Playgroud)
首先确定您需要使用的相关 2 个提交哈希来获取它们之间的提交哈希列表
git log --oneline
Run Code Online (Sandbox Code Playgroud)
然后你可以选择相关的两个提交哈希,并通过使用找到它们之间的提交哈希
git log <commit hash 1>..<commit hash 2> --oneline | cut -d " " -f 1
Run Code Online (Sandbox Code Playgroud)