Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将git版本列表限制为特定的分支和远程?_Git - Fatal编程技术网

如何将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
。因此所有这些提交现在都在上进行de>master。提交
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