【问题标题】:Git equivalent for “hg log” with branch name check带有分支名称检查的“hg log”的 Git 等效项
【发布时间】:2020-09-10 13:21:00
【问题描述】:

我想列出在特定分支中直接完成的所有提交。在 hg 中,我可以使用以下命令获取它。

hg log -b {branchname}

我尝试了不同的命令 git 来达到同样的效果,但是没有任何用处。

git log --no-merges
git log --no-merges --first-parent
git log ---no-merge ^HEAD ^master
git log --branches={BRANCH}

如何列出在给定分支中直接提交但不从其他分支合并的所有变更集。

【问题讨论】:

  • 根据documentation,你应该也可以在git中使用--no-merges。如果这对您没有“用处”,您将不得不举例说明原因以及您期望的输出。
  • 什么分支被移动了?如果这些提交不是在某个分支下“提交”但现在它们出现了怎么办。
  • 我认为您不会拥有与在 Mercurial 中所做的提交不链接到分支的完全相同的功能(对于我知道的少数人)。在 Git 中,分支(或更一般的 refs)是指向提交的指针。
  • git log --first-parent --no-merges 有什么特别的问题?这列出了你开始的分支的没有合并和没有合并的历史记录,只要你想要。
  • @Philippe 所说的是正确的:在 Mercurial 中,分支真的很重要。它们是一流的实体,分支名称在不同的存储库之间共享。在 Git 中情况并非如此:Git 提交不会记录其分支,并且分支名称的共享方式也不同。 (一个 Git 存储库可以查看另一个的分支名称,但没有义务使用它们。确实,使用 Hg 的“convert”扩展,您可以跨 Hg 映射分支名称存储库,但仍然有一个一流的“分支名称”概念附加到每个提交。)

标签: git mercurial tortoisehg


【解决方案1】:

首先,git和mercurial有一个根本的区别:

Mercurial 有几种对象,其中:分支和书签。
git 分支类似于hg 书签,而不是hg 分支。

您将始终只能看到 git 分支的头部提交的历史记录,而不是它经历的实际中间状态序列。


看起来你已经尝试过接近“分支历史”的东西,我会建议:

git log --first-parent

git 还会记录您当地分支机构的发展历程:

 git reflog <branchname>

但是如果你的分支在某个时候被重命名,这个日志可能会被刷新。

您还可以部分了解远程分支是如何演变的:

git reflog origin/<branchname>

此日志仅在您fetch(或pull)时更新,因此如果分支在两个fetch 之间被其他人多次更新,您可能会错过几个中间步骤。


如果您想查看不属于masterbranch 上的提交,请尝试:

git log master..branch
# which is the same as :
git log ^master branch

【讨论】:

  • git log --first-parent 如果有人将他们的分支与 master 合并,那么这些提交将被列在所有分支中。我也想省略那些变更集。我只想直接在该分支中完成变更集/提交
  • 在您的问题中,您说您已经尝试过 git log --no-merges --first-parent ;这个命令有什么不符合您的期望的?
  • 几周前我创建了一个测试分支并且只做了一次提交。我的期望是单独获得该变更集,但是使用 git log --no-merges --first-parent 它提供了多个变更集,这些变更集在与 master 合并时来自其他分支。
  • 您尝试过git log master..HEADgit log master..branch 吗?如果您的分支尚未合并到 master 中,这应该足够了。对于合并的分支,您需要一个额外的步骤。
猜你喜欢
  • 2019-11-20
  • 1970-01-01
  • 2010-12-22
  • 2022-01-19
  • 2018-04-21
  • 2012-12-06
  • 2023-03-15
  • 1970-01-01
  • 2020-09-21
相关资源
最近更新 更多