git(ls远程)-列表“;“远程”;按创建日期排序的分支

git(ls远程)-列表“;“远程”;按创建日期排序的分支,git,github,gitlab,ls-remote,git-ls-remote,Git,Github,Gitlab,Ls Remote,Git Ls Remote,我知道使用下面的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 32b73a94a2ef1be27298a7bbf6670670c9ad489

我知道使用下面的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分支列表一样排序的东西


git ls remote所做的是调用另一个git,即您在上面看到的URL处的git,并询问它的引用:
头、分支名称、标记名称等等。但它发送的唯一信息是那些名称和散列ID

正如我在上面的评论中所指出的,每个提交都由一个哈希ID表示,哈希ID是提交的真实名称,其中有两个时间戳。1要获得其中一个或两个时间戳,必须具有提交。因此这意味着一般来说,
gitlsremote
是不够的:您可能没有从另一个git获得其散列id的提交

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

您可能需要添加
--prune
git fetch-p
),以指示您自己的git删除您现在拥有的任何远程跟踪名称,这些名称不再对应于git中的分支。如果您不这样做,您将永远保留过时的远程跟踪名称(或者直到您明确删除它们)。这并没有像杂乱无章那样有害

现在你有了他们所有的承诺,加上你自己没有发送的任何承诺。你也有他们所有的名字,改成你的远程追踪名字

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

或:

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

因此:

git fetch -p
git branch -r --sort=committerdate
应该得到你想要的(除非你想要作者日期;见脚注1)

(旁白:我喜欢在我的每用户配置中配置
fetch.prune
true
,这样所有的抓取行为都像
git fetch--prune
一样。)


1两个时间戳是作者时间戳和提交者时间戳。在许多情况下,两者都有相同的日期和时间。一个新的提交通常都是相同的,然后如果您通过
git commit--amend
git-rebase
或其他任何一种方式将提交复制到一个新的和改进的提交,那么新的和改进的提交具有旧提交的作者信息,您和现在是提交者信息

2从技术上讲,它更像是ASCII betic或UTF-8-betic,而不是字母:数字在大写之前,大写在小写之前


3您的
git分支
需要足够新,才能有
--sort
选项,该选项在git 2.7中引入到
git分支
。如果您的Git较旧,考虑使用<代码> Git为每个REF。

分支没有创建日期。(提交有两个时间戳,一个分支名称标识一个提交,但显然这不是您要查找的内容。)啊,也许这就是您要查找的内容。我没有使用GitLab,但它似乎在告诉您分支名称所指向的提交的两个时间戳之一的年龄。因此,如果有人现在进行新的提交并将其推送到服务器,新提交的时间将是几秒钟,分支将移到顶部。@torek我该如何做您描述的事情?也许使用一些git命令,甚至bash“函数”?谢谢=我读了你写的所有东西,但我需要更冷静地阅读才能更好地理解。很快我会给你反馈。谢谢=DWell,您可能需要的两个命令位于靠近末尾的一个块中。如果您想要提交的实际时间,您需要将
--format
添加到
git branch
,这需要更新的git版本,或者对每个ref使用
git,这比
git branch
更难使用。如果我向您解释我真正想做的事情,可能会有所帮助。我创建了一个bash脚本,在Meld工具()的帮助下合并多个分支。我相信,如果我们能获得按更改或创建日期排序的输出(无论我们能做什么),我们就能使工具更高效(使用起来更容易、更安全)。为了解决我所说的问题,请注意代码。顺便说一句“vgm”是一个免费的开源代码(BSD 3条款“新”或“修订”许可证)。谢谢=DAh,我自己不使用任何合并工具。但是,请注意,通常情况下,分支的tip提交时间与分支可能存在的任何合并问题都没有很好的相关性。合并问题的发生是因为合并基提交随着时间的推移发生了显著的漂移,因此理想情况下,您应该查看两个分支的对称差异,检查它们内部提交的数量和大小,和/或只是将合并基与两个分支提示进行比较。还请记住Git可以进行八达通合并,这并不能真正实现两两合并所不能实现的任何功能,但在一些多主题分支的情况下,它很有用,表明
git branch -r --sort=committerdate
git fetch -p
git branch -r --sort=committerdate