Git中等同于hg heads/hg parents的命令是什么?

12
在Git中,我找不到与hg heads相对应的功能。在git-hg rosetta stone中没有提供答案。关于hg parents,在hg中它只是简单地告诉节点的直接祖先,而rosetta stone只是非常不实用地给出了以下解释:
git log # you can read all the information you need from there (as long as you already know the answer to the question you're asking) 

1
жҲ‘зӣёдҝЎ git branch жҳҜ hg heads зҡ„зӯүд»·е‘Ҫд»ӨгҖӮ - JaredPar
@JaredPar 在Mercurial中,一个head是指没有子节点的提交。这与分支不是同一概念。有些分支可能有子节点,而有些没有子节点的提交可能不是分支的head。 - Michael Mior
看起来像是一个 X-Y 问题。你在 Git 中想要做什么?可能有一个(更好的)等价物可以实现你想要做的事情,而不是在 Hg 中实现你所做的事情的等价物。 - manojlds
3
@MichaelMior 在Mercurial中,一个head不仅仅是一个没有子节点的提交。在Mercurial中,一个head被定义为在同一分支中没有子节点的提交。因此,hg heads会显示所有分支的heads。 - robert
@robert 从文档中得知:"一个head是一个没有子changesets的changeset。" - Michael Mior
2
@MichaelMior 我自己纠正一下:分支头是没有同一分支上的子提交的变更集。 hg heads 显示所有分支头。我的观点是它们在其他分支上可能有子提交。 - robert
3个回答

10

git rev-list HEAD, git rev-list <sha1>git rev-list HEAD -1 -- file 分别相当于不同形式的 hg parents

关于你遇到的“分离头指针”问题,执行 git checkout <sha1> 命令是为了查看提交记录而非通用工作流程。如果你想要基于某个提交记录创建一个分支,你需要执行 git branch <name> <sha1> 或者 git checkout -b <name> <sha1> 并在这个分支上工作。

因为以上原因,我认为将“hg heads”的等价物在 Git 中定义为所有没有子提交的提交记录并不理想,但最接近的等价物是 git branch


1
git rev-listhg parents几乎不等价(或者至少在这个答案中没有展示出来);这里有一个关于它的问题。 - Roman Starkov

2
您可以使用git branch命令查看所有分支的命名头,使用git tag命令查看所有标签的命名头。我相信有一种高端的方法可以显示所有命名头(例如悬挂提交),但请记住,在默认设置下,这些可能会被git清理掉。 更新 我刚意识到这与Mercurial中的头概念无关。这将真正向您展示存储库中的任何已命名修订版本,这可能对您的目的有用,也可能没有用。

2
git show-ref 会显示所有的引用、分支和标签。 - Andy
2
我认为我可能缺少一些git的概念。当我使用hg时,这些东西都很简单,但是在使用git时,我经常遇到分离的头和无法推送/拉取/任何操作的状态。垃圾回收是什么意思?如果我回到以前提交的版本并开始编码并提交,那么应该会创建一个新的非命名头,对吧?那我怎么查看它们呢? - George Mauer
@GeorgeMauer 当你处于分离头状态时,你不应该像那样提交。 - Andrew Marshall
1
@AndrewMarshall 不是这样的。如果你需要从旧版本中测试某些东西,这是一种完全正常的技术。我不会说它被广泛使用,但确实存在有效的用例。 - Michael Mior
@MichaelMior 在旧版本中测试某些内容通常不需要在该状态下进行提交。我同意您的观点,如果您这样做,应将其提取到分支中,这是可以接受的,但是在分离头状态下进行提交对我来说毫无意义。 - Andrew Marshall
显示剩余3条评论

0
作为“hg heads”的替代品,我使用:
git log --no-walk --parents --abbrev-commit --all

(请注意,您可以将此与其他过滤器结合使用,例如--committer,包括格式过滤器)
作为hg parents的替代品,我使用:
git log --no-walk --format='format:%P%n' HEAD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接