如何将git版本列表限制为特定的分支和远程?
我希望能够搜索特定远程/分支组合的如何将git版本列表限制为特定的分支和远程?,git,Git,我希望能够搜索特定远程/分支组合的git rev list。我对--branchs和--remotes选项感到困惑,我想这就是我想要使用的 对于--remotes,文档中说: --遥控器 假设refs/remotes中的所有ref在命令行上都列为[commit]。如果给定[pattern],则将远程跟踪分支限制为与给定shell glob匹配的分支。如果图案缺少?、*、或[,则暗示结尾处有“/*” 我不明白它说的是什么意思,它们像“提交”一样列在命令行上 我的一部分困惑是,我不确定搜索的字符串-
git rev list
。我对--branchs
和--remotes
选项感到困惑,我想这就是我想要使用的
对于--remotes
,文档中说:
--遥控器
假设refs/remotes中的所有ref在命令行上都列为[commit]。如果给定[pattern],则将远程跟踪分支限制为与给定shell glob匹配的分支。如果图案缺少?、*、或[,则暗示结尾处有“/*”
我不明白它说的是什么意思,它们像“提交”一样列在命令行上
我的一部分困惑是,我不确定搜索的字符串--branchs
和--remotes
的格式是什么,所以我留下来尝试在不同的地方加入通配符,看看它是否有效。我会假设分支类似于“remotes/remote\u name/branch\u name”,而remotes类似于“remote\u name”但是当我试着在脑海中搜索时,我并没有得到我期望的结果
例如,下面是我要运行的基本查询:
git rev-list --after='timestamp' --author="Name" --format='%h,%aI,%cI'
我在各种通配符配置中使用了--branchs=*remote\u name/branch\u name--remotes=remote\u name
的变体,但它从来都不起作用。我的意思是,我知道在某些远程/分支组合中存在提交A,但有时特定远程的所有分支都会找到提交A,即使它不应该这样做,有时,非源远程服务器上的任何分支都不会返回提交,即使我知道它存在,等等
我想如果我能更好地理解如何使用--分支
和--遥控器
进行搜索,我就能把它们拼凑在一起。也许版本列表
并不意味着在这两个选项都打开的情况下进行搜索
任何帮助都将不胜感激
谢谢。TL;DR
git rev list
是关于遍历提交图(DAG)的。你给它一个起点。--branchs
是给它不同起点的一种方式;--remotes
是另一种方式。与默认使用HEAD
作为起点的git log
不同,你必须给git rev list
一个提交起点。然后它列出了可访问的提交:名称仅在定位图形漫游的起点方面相关
长的
在Git中,您必须记住分支是什么(或不是)。如果没有这个概念,您将被严重引入歧途。为了进行比较,让我们先看看Mercurial,在Mercurial中,分支是一个更具体的东西(尽管Git对分支的松散和草率的定义现在也在Mercurial的使用中泄漏)
在Mercurial中,可以使用以下命令创建分支:
hg branch <name>
分支名称(在本例中为master
)存储最后一次提交的原始散列ID,该提交将被视为该分支的一部分。提交H
存储另一个提交散列ID,对于其前一次提交G
G
存储其父级的散列ID,依此类推,通过提交B
。提交>B
存储A
的哈希ID,但是A
是有史以来第一次提交,因此它没有父项
(由于提交本身是固定的,因此不再需要将内部箭头绘制为箭头,这有助于下一步,因为文本中的箭头绘制非常有限。因此从现在起,我将使用:
A--B--C <-- master
现在Git需要知道更新哪个分支名称,因此Git将名称HEAD
附加到一个(且仅一个)分支名称:
A--B--C <-- master
A--B--C--D <-- master, develop (HEAD)
提交E
现在在develope
上。提交A
和D
也在develope上,并且都在master
上。现在让我们git checkout master
进行新的提交F
:
A--B--C--D--F <-- master (HEAD)
\
E <-- develop
(我已经把头
漏掉了,因为我们将要移动它。)
现在让我们运行git checkout master&&git merge develope
。这将把自共享提交D
以来的所有master
更改与自共享提交D
以来的所有develope
更改结合起来。也就是说,git将运行:
git diff --find-renames <hash-of-D> <hash-of-E> # what happened on master
git diff --find-renmaes <hash-of-D> <hash-of-H> # what happened on develop
提交I
返回到H
和F
,H
返回到G
,然后返回到E
,然后我们所做的叉在D
处向后重新连接,这导致C
和B
,最后返回到A
。因此所有这些提交现在都在I
和F
仅在master
上,而A-B-C-D-E-G-H
在两个分支上
这就是合并提交的特殊之处。现在我们有了合并提交,我们可以删除名称develope
:
A--B--C--D <-- master
\
E <-- develop (HEAD)
A--B--C--D--F------I <-- master (HEAD)
\ /
E--G--H
太长了,读不下去了!
git rev list
是关于遍历提交图(DAG)的。你给它一个起点。--branchs
是给它不同起点的一种方式;--remotes
是另一种方式。与默认使用HEAD
作为起点的git log
不同,你必须给git rev list
一个提交起点。然后它列出了可访问的提交:名称仅在定位图形漫游的起点方面相关
长的
在Git中,您必须记住分支是什么(或不是)。如果没有这个概念,您将被严重引入歧途。为了进行比较,让我们先看看Mercurial,在Mercurial中,分支是一个更具体的东西(尽管Git对分支的松散和草率的定义现在也在Mercurial的使用中泄漏)
在Mercurial中,可以使用以下命令创建分支:
hg branch <name>
分支名称(在本例中为master
)存储上次提交的原始哈希ID,该提交将被视为该分支的一部分。提交H
A--B--C--D--F <-- master
\
E--G--H <-- develop
git diff --find-renames <hash-of-D> <hash-of-E> # what happened on master
git diff --find-renmaes <hash-of-D> <hash-of-H> # what happened on develop
A--B--C--D--F------I <-- master (HEAD)
\ /
E--G--H <-- develop
A--B--C--D--F------I <-- master (HEAD)
\ /
E--G--H
git rev-list ... --remotes=*remote_name/branch_name