3

我知道使用下面的 git 命令,我可以列出我所有的“远程”分支......

[someone@someone-pc somerepo]$ git ls-remote
Username for 'https://somegit.com': someone
Password for 'https://someone@somegit.com': 
From https://somegit.com/somepath/somerepo.git
32b73a94a2ef1be27298a7bbf6670670c9ad4892        HEAD
99cfe797ee2f4cd3fc12ea1aef8dc4ea0f3538c7        refs/heads/a_branch
687332d5e82436d806fea2c22ac5e8772e73b33a        refs/heads/b_branch
b1d82987dd87b99c505282cbcdf1d4c4d36be2d2        refs/heads/c_branch
32d4a73e686524e50a92880ddbd744d1363834bb        refs/heads/d_branch
097ad2a9a69399996f7e1864436d483b2a85e3c1        refs/heads/e_branch
1e92bb0aa448a840e04928272759a3941774575b        refs/heads/f_branch
32b73a94a2ef1be27298a7bbf6670670c9ad4892        refs/heads/master

问题:有没有办法按创建日期列出这些分支?

谢谢!=D


更新:

为了说明,我想要一些像 gitlab 分支列表这样排序的东西......

gitlab 分支列表

4

1 回答 1

1

什么git ls-remote是调用另一个 Git——你在上面看到的 URL 上的那个——并询问它的引用:HEAD、分支名称、标签名称等。但它发送的唯一信息是这些名称和哈希 ID。

正如我在上面的评论中所指出的,每个提交——由一个哈希 ID 表示,它是提交的真实名称——有两个时间戳。1 要获得其中一个或两个时间戳,您必须具有commit。因此,这git ls-remote通常是不够的:您可能没有从其他 Git 获得哈希 ID 的提交。

您首先需要运行的是git fetch,它以相同的方式开始:它调用其他 Git 并从中获取其分支、标签等的列表,以及每个名称所代表的哈希 ID。然后,对于他们的分支,您的 Git 将创建或更新您的远程跟踪名称:例如,它们master将变为您origin/master的。他们develop成为你的origin/develop。无论他们有什么名字——<code>refs/heads/* 是完整的形式——你的 Git 会创建或更新你自己的相应refs/remotes/origin/*名称。但是在你的 Git 能够做到这一点之前,你的 Git 也必须自己获取提交,所以对于他们拥有的任何你没有的提交,你的 Git 需要的,你的 Git 会得到这些。

您可能想要添加--prunegit fetch -p简称)以指示您自己的 Git 删除您现在拥有的任何远程跟踪名称,这些名称不再对应于其 Git 中的分支。如果你不这样做,你将永远保持陈旧的远程跟踪名称(或者直到你明确地修剪它们)。这并不像杂乱无章那样有害。

现在你有他们所有的提交,加上你自己的任何你还没有发送。你也有他们所有的名字,都变成了你的远程跟踪名字。

您可以使用 查看这些分支git branch -r。的默认排序顺序git branch是组内字母。2 但你可以给出一个--sort=key选项:3

git branch -r --sort=authordate

或者:

git branch -r --sort=committerdate

它将根据存储在每个远程跟踪名称指向的提交中的相应时间戳进行排序。

因此:

git fetch -p
git branch -r --sort=committerdate

应该得到你想要的(除非你想要作者日期;见脚注 1)。

(顺便说一句:我喜欢在我的每个用户配置fetch.prunetrue进行配置,以便所有获取都像git fetch --prune往常一样。)


1这两个时间戳是作者时间戳提交者时间戳。在许多情况下,无论如何,两者都拥有相同的日期和时间。一个新的提交通常会得到相同的结果,然后如果你将提交复制到一个新的和改进的提交,通过git commit --amendgit rebase任何其他可以做到这一点的方式,新的和改进的提交具有旧提交的作者信息,你和现在作为提交者信息。

2从技术上讲,它比字母更倾向于 ASCII-betic 或 UTF-8-betic:数字在大写之前,大写在小写之前。

3git branch需要足够新才能拥有在 Git 2.7--sort中引入的选项。git branch如果您的 Git 较旧,请考虑使用git for-each-ref.

于 2019-10-29T19:50:38.050 回答