我想获取主分支的所有提交哈希 ID。但是,使用以下命令时,只有最新的提交 ID 与结果匹配。旧的提交哈希 ID 不属于 master 分支。有没有其他方法可以获取仅属于 master 分支的提交哈希 ID?
git rev-parse origin/master --all
OP评论...
就我而言,这也显示了分支的提交哈希 ID
TL;博士使用git rev-list master --first-parent.
在 Git 中,提交不属于分支。提交相互连接。分支只是指向该分支的最新提交的标签。
相反,可以从分支访问提交。
例如,假设您有 master 和从 master 分支出来的功能。看起来像这样。
A - B - C - D - E [master]
\
F - G - H [feature]
Run Code Online (Sandbox Code Playgroud)
master只是一个指向提交 E 的标签。feature只是一个指向提交 H 的标签。
如果你git log master会得到A、B、C、D、E;他们可以从主人那里到达。如果你git log feature会得到A、B、C、F、G、H;它们可以通过功能访问。
如果您只想查看提交可到达的功能,而不希望与 master 共享的功能,请使用git log master..feature. 将显示 (A, B, C, F, G, H) - (A, B, C, D, E) 或 F, G, H。
有关更多信息,请参阅gitrevisions 。
将功能合并到主版本并删除功能后,它看起来像这样。
$ git checkout master
$ git merge feature
$ git branch -d feature
A - B - C - D - E - M [master]
\ /
F - G - H
Run Code Online (Sandbox Code Playgroud)
如果你git log master会得到A、B、C、D、E、F、G、H、M;从 master 可以到达的所有内容,无论它最初提交给哪个分支。
您可以看到这些连接和标签git log --graph --decorate。
但我们可以获得可能是掌握的原始提交内容。
在上面的示例中,合并提交 M 连接到两个提交,它有两个“父项”:E 和 H。它们有一个顺序。第一个是合并到(master)的分支,第二个是合并到(feature)的分支。
如果您只遵循第一个父提交,您将只获得 master 的提交:A、B、C、D、E、M。使用 执行此操作--first-parent。两者git-log并git rev-list取--first-parent。
git log --first-parent --oneline master
Run Code Online (Sandbox Code Playgroud)
或者
git rev-list --first-parent master
Run Code Online (Sandbox Code Playgroud)
不能保证这会产生对 master 的原始提交,但如果您遵循中央分支工作流程,其中分支会合并到 master 中,那么它会产生原始提交。更复杂的工作流程可能会改变父母的顺序。