如何找到git的日志中提交的gitlab指示?

问题描述 投票:0回答:2

请参阅环境的gitlab图像还有就是在我们的情况下提交的版本8d6995e4。我做的git的日志| grep和找不到这个承诺版本。什么这个字符串指示? enter image description here

git gitlab
2个回答
1
投票

TL;DR

当您运行git log你告诉它承诺开始。如果你不告诉它,它假定当前从当前分支提交。它发现,它可以从出发点发现提交的其余部分。您的仓库提交8d6995e4,但它不是在你的当前分支。

您可以使用git log --all告诉它从所有记录的开始点(分支名称,标签名称,远程跟踪的名字,等等)开始,你可能想Get Help From A Dog,或OznOg suggested,使用一个可视化浏览器。参见Pretty git branch graphs

Long

要理解这是怎么回事,你需要了解的提交 - 这是Git的raison d'être和Git是如何找到他们,通常从分支名称开始。该进入的图形,这是在一个甚至更长和更彻底的方式在Think Like (a) Git解释了可达性的想法。

Commits

每个提交都有自己独特的哈希ID。这就是你在这里看到又大又丑的字符串,8d6995e4(尽管实际上它是更长的时间,40显然是随机的垃圾字符,而不是真正随机的话)。散列ID是“真名”的承诺:这是Git是如何找到犯,在“所有提交过”(哪个人做的主要事情就是添加更多的提交)数据库。

每个提交还持有父提交哈希ID。也就是说,一些父母的孩子犯记得父母的哈希值。父母不记得自己的孩子,因为一旦提交制成,里面没什么东西可以永远改变。提交的该冷冻岬不要紧git log但无论做许多其他Git命令。

以上是有点夸张,因为,至少一个承诺,在最前面的一个人,使一个新的,空的版本库,没有父。这个提交父是提交附带在此之前提交。第一次提交已没有提交自带之前。而且,合并的提交有多个父,这是什么使他们合并的提交。

这一切都意味着,承诺形成向后寻找链。正是这种倒退链中git log使用。这里有一个仓库的只有三个提交,而不是大丑40个字符的散列的ID在哪里,我只用一个大写字母一个简单的绘图。很显然,我们会用完相当快库将满26次的提交,所以这不是混帐做它的方式,但它确实说明了这个问题就好了。我们的第一个承诺是A,它没有父。然后,我们让B它得到A作为其母公司,也是最后一点,我们做C它得到B是其父母。

A <-B <-C

因为里面什么也没有提交都不能改变,我们可以得出倒着走,从孩子到父母为是双向的,只要我们记得,Git有往回走线的连接。这是我在StackOverflow的帖子更方便,因为我有时也需要做对角线:

A--B--C
       \
        D

我有一个在这里为大家工作,没有方便的文本箭头。

Branch names point to commits, but also move

现在,git log工作,你必须给它一个开始提交 - 哈希ID。事实上,在Git中很多东西的工作,你必须给他们一个哈希ID。但是,真正的哈希ID是大和丑陋(8d6995e4)显然随机的。他们绝对不是一个明智的秩序,也没有办法为人类记住他们。所以我们要做的是,我们挑选出一个分支名称,如master。我们的Git推最后的哈希ID提交到分支的名字,这意味着我们的图纸现在看起来是这样的:

A--B--C   <-- master

这个名字让Git的找到最后一次提交的,在这种情况下C。从那里,git log散步向后B,然后回到A,然后因为A没有父,混帐终于可以停下来。

要添加新的提交,Git会打包不管它是你所提交 - 一个新的快照,并添加元数据,如您的姓名和电子邮件地址,当前时间,和你的日志信息。 GIT中会自动添加到当前的散列ID提交的元数据。 Git的写了这一切到对象数据库,并编写它的行为赋予这个新提交其独特的哈希ID。这,当然是其他一些大丑数,但我们会用字母D

A--B--C   <-- master
       \
        D

要记住,qazxsw POI是我们的最后一次提交的,现在的Git更新你的名字qazxsw POI:

D

所以现在master将在A--B--C \ D <-- master 开始,然后显示git log,然后D,然后C

Using your HEAD to change what you see and update

这是事关的提交。分支的名称在那里帮助我们找到他们。但是,当我们有几个分支名称会发生​​什么?让我们来看看一个稍微复杂一点的图中,我们做了一些更多的提交后:

B

上面我们说,当我们做一个新的提交,Git的移动分支名。但如何做的Git知道要移动的分支的名字吗?如果我们有:

A

- 和我们可能确实在某些时候,怎样的Git知道,当我们做出承诺...--C--D <-- master \ E--F <-- develop ,它的发展应该动,而不是...--C--D <-- develop, master

答案是,我们使用E到特殊的名字master重视只是一个分支。如果我们选择git checkout,我们得到:

HEAD

然后,当我们添加提交develop,Git的移动...--C--D <-- develop (HEAD), master

E

该名develop撑连接到分支的名称,甚至作为分支名称本身移动。 (这样做的实际执行情况,对于那些谁是好奇,是有在...--C--D <-- master \ E <-- develop (HEAD) 名为HEAD一个文件,即仅包含分支名称本身。所以.git的内容只有当你选择一个新的分支使用更改,内容最新提交的HEAD和分支名称的哈希ID的HEAD,存储在其他地方,在一个或多个各种不同的地方。)

请注意,顺便说一下,在这里的图纸,提交master是在两个分支。提交develop只在A-B-C-D。但是,因为我们可以将分支机构的名称,我们可以通过移动E-F指向develop改变这一点。这将使所有六个提交上两个分支。我们没有改变提交要做到这一点,这是必要的,因为我们不能。 :-)

图可以得到更为复杂。而不是显示一个非常复杂的一个(像你可能实际上有一个),这里有一个简单的办法,显示当我们承诺合并会发生什么。这里的图片前:

master

和一前一后:

F

新的合并提交 I--J <-- release (HEAD) / ...--G--H \ K--L <-- develop 只在 I--J / \ ...--G--H M <-- release (HEAD) \ / K--L <-- develop 。它有两个家长,Mrelease。提交J只在发行,它有一个父L。提交J是两个分支,它有一个父I。无论LK引回犯I,这是两个分支,并导致回K,这是对双方,等等。

This is where H comes in

如果你不给它一些起点提交运行G,Git会看你的git log找到你的当前提交。您当前的承诺是你的一个分支名点。你提到的评论,你对你的git log分支,它指向一个合并提交。所以,你的图片可能看起来像什么,我们只是画。

HEAD命令将开始提交release并展示给你。然后将所有git log的父母给它需要证明提交的名单。现在必须努力向您展示这两种MM在同一时间。它不能,所以它选择这两个中的一个展现。然后将其添加哪一个它显示的母公司,它的东西,以显示列表。

如果它只是表明JL现在有两个提交向您展示在同一时间,即Jgit log。它不能在同一时间同时显示,所以它选择一个。然后,它补充说,一个人的父母到其列表,等等。

L命令将打乱从合并双方的提交,默认情况下。特别是,它显示了一个他们在基于时间戳的时刻,让你第一眼看到的较新的。如果Igit logJ之前看到L较新,但如果JL你会首先看到L更新。这同样适用于JL(VS既IK)。但L不尊重曲线的形状,无论别人做什么的,直到它完成显示Jgit log它不会显示H

最终,这将是能够显示I-J,并且当它其他提交的列表中显示为空。它会显示K-LH的母公司H添加到列表中显示(现在只有一个条目),然后显示H并添加G的母公司,等等。

G不会显示犯下它不能由开始G和向后工作得到!

git log

假设有一些其他的名字记住的哈希ID M。这可能不是一个分支名:也许它就像 I--J / \ ...--G--H M <-- release (HEAD) \ / K--L <-- develop \ N--O--P <-- another-name P一个名字,那你的Git使用记住您的Git在一些其他的Git分支看到的名字。

运行origin/develop不会显示提交origin/master。具有不显示git log也不会搬回P无论是。 Git的字面上无法从PO。它只能从LN,向后。你需要选择一个开始提交的哈希开始达到或超过您所关心的承诺,获得提交你所关心的。

请注意,在这里提交N不是“上” L。我们用“上”是指“承诺从尖端到达”。 N-O-P的尖端提交release和提交release不能从M倒退到达。

请注意,提交N不能从M倒退既可以达到!两次提交可以有一个共同的祖先而自身不具有父/子或祖父母/孙子的关系。他们有一个共同的祖先可能只会让他们的兄弟姐妹或表兄弟的事实。


1
投票

你可能不是最新的或错误的分支。直接尝试SHA1

M

一个N

© www.soinside.com 2019 - 2024. All rights reserved.