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_Tags_Branch_Methodology_Release Management - Fatal编程技术网

在git中,如何找到创建分支的版本?

在git中,如何找到创建分支的版本?,git,tags,branch,methodology,release-management,Git,Tags,Branch,Methodology,Release Management,更新:示例存储库 在github回购协议的背景下。如何轻松找到rev“b0430cee”?我知道我可以看看,但这个存储库模拟的真实示例有十几个提交者和多个其他分支。不太容易使用检查 当分支已合并多次时,如何查找分支创建修订 我知道这个问题: 对于已合并多次的分支,该解决方案似乎不起作用。我们通常将错误修复从发布分支合并回主分支。也许这部分我们都做错了。。。对git来说还是新鲜事 想象一下下面这个简单的例子。真正的东西在主/分支上有更多来自多个人的提交。还有几个发布分支(想想1.0、1.1、1.2

更新:示例存储库

在github回购协议的背景下。如何轻松找到rev“b0430cee”?我知道我可以看看,但这个存储库模拟的真实示例有十几个提交者和多个其他分支。不太容易使用检查

当分支已合并多次时,如何查找分支创建修订

我知道这个问题:

对于已合并多次的分支,该解决方案似乎不起作用。我们通常将错误修复从发布分支合并回主分支。也许这部分我们都做错了。。。对git来说还是新鲜事

想象一下下面这个简单的例子。真正的东西在主/分支上有更多来自多个人的提交。还有几个发布分支(想想1.0、1.1、1.2、1.3)

我们仍然是git的新手,正在研究管理发布和分支的最佳方法,我们已经决定需要追溯性地向repo添加一些标记。例如,1.0分支开始时的1.0标记,以及bugfix版本的更高版本1.0.1标记


后续奖金问题:添加我想要的标签的最佳方式是什么?我应该在哪个版本上加标签?第一次提交新分支?还是在分支提交之前的第一次公共提交?

在阅读问题时,我对您提出的问题有点反反复复

如果你真的只想要一根树枝的根,我想你想要像这样的东西

git rev-list --merges --boundary branch1 branch2 | tail -1
如果您想确认分支实际上是相关的

git rev-list --left-right --merges --boundary branch1 branch2 | 
    grep '^-' | 
    tail -1 |
    cut -c2-

然而,你想要的机会是相当高的

git merge-base branch1 branch2
此外,下一次需要漂亮的燕尾图时,以下内容也会很有帮助:

git show-branch # [--mergebase] branch1 branch2
您可以使用git日志获得更多的控制:

 git log --graph --left-right --merges --boundary HEAD MP26/MP26

>   commit 0118d9979d1d27f08fa14cddfffa3e9c2cd5fe9c
|\  Merge: 8958c53 e1cd319
| | Author: Seth Heeren <seth.heeren@xxxx>
| | Date:   Fri Feb 18 12:05:49 2011 +0100
| |
| |     Merge branch 'MP26' into tmp
| |
| o commit e1cd31926d01c08092a95226ac7b49bbea19ac92
|   Author: Seth Heeren <seth.heeren@xxxx>
|   Date:   Thu Feb 17 16:39:17 2011 +0100
|
|       xxxxx
|
o commit 8958c534b034cbb28bf1e853de0bfec0a9b0ddbb
  Author: Seth Heeren <seth.heeren@ocwduo.nl>
  Date:   Fri Feb 18 12:05:30 2011 +0100

      fixup
git日志--图形--左-右--合并--边界头MP26/MP26
>提交0118d9979d1d27f08fa14cddfffa3e9c2cd5fe9c
|\合并:8958c53 e1cd319
||作者:Seth Heeren
||日期:星期五2011年2月18日12:05:49+0100
| |
||将分支“MP26”合并到tmp中
| |
|o提交e1cd31926d01c08092a95226ac7b49bbea19ac92
|作者:Seth Heeren
|日期:星期四2011年2月17日16:39:17+0100
|
|xxxxx
|
o提交8958c534b034cbb28bf1e853de0bfec0a9b0ddbb
作者:Seth Heeren
日期:2011年2月18日星期五12:05:30+0100
修理

Git日志还支持
--decoration
选项,如果您喜欢从
Git show branch

中显示分支名称,那么可以很容易地在Git中追溯添加标记。您所需要做的就是将sha1 hash赋予git tag命令(谢谢Sehe):


很难回答你的第二个问题,因为很难定义什么是“最好的”。在工作中,我们有一个每个人都反对的开发分支,当我们决定要发布时,我们创建一个发布分支,例如rel-1.0,该分支将一直存在,直到我们决定完成它。然后我们将其合并到master中,用1.0标记并删除发布分支。因此,我们的标签应该始终被视为神圣和稳定的,因为它可以得到。因此,在我们的例子中,当我们将发布分支合并到master中时,总是会创建合并提交。

也许我误解了这个问题,但是分支是由提交定义的,提交的每个祖先都包含在分支中。例如,假设
emergencybug fix
是一个分支,其提示位于图表中的
emergencybug fix
——该分支上最早的提交将是
过去的(主)
。如果只看提交图,“创建分支时的修订”不是一个定义良好的概念

如果您只关心在特定存储库中创建分支的时间,可以使用“reflog”-例如,查看以下输出中的最后一行:

git reflog show emergency-bug-fix
但是,该命令的结果因存储库而异,具体取决于在存储库中创建ref的时间,例如通过获取或推送。此外,默认情况下,reflog将在90天后过期条目,它可能不再具有该信息。如果您有一个幸运的中央存储库,您可以在那里进行同样的尝试,这可能会让您在中央存储库中首次创建ref的位置进行提交。然而,我认为这不是你想要的解决方案


正如您正确计算的那样,最好只标记您感兴趣的提交图中的点。告诉您如何执行此操作。

因为您添加了git回购。。。我远程工作以进行测试

如何轻松找到rev“b0430cee”

在这种情况下,这艘漂亮的巨轮为我完成了任务:

git rev-list --reverse --topo-order --left-right --boundary 1.0...master | 
    grep "^>" -B1 |
    head -1 |
    cut -c2-
如果您想获得469c14a1fa8a40237700(
新功能工作
),这对我很有用:

git rev-list --reverse --topo-order --left-right --boundary 1.0...master | 
    grep "^>" |
    head -1 |
    cut -c2-

HTH

我认为一个优秀的git分支模型可以遵循(听起来你可能已经在尝试遵循它了),我真的不知道为什么你会在“功能”上分支,除了它标志着一个主要的发布。这个“功能”仅仅是最后一个共同的祖先。我们进行了分支,因为团队的其他成员需要继续前进,然后有人发现了一个需要在“1.0”版本中修复的bug。。。标签会使这一点变得更清楚为什么你链接中发布的解决方案不起作用?您还需要master和您的分支之间的共同祖先,这就是
git merge base branch master
提供给您的。事实上,它已经被合并回主控中并不是一个好消息problem@everyone之前的评论是错误的,我理解;合并库将提供
紧急错误修复
,而您需要
功能
“git merge base”将查找从分支到主分支的最新合并。我想知道主分支和分支第一次发散的时间dGit rev list branch1 | tail-1(从主分支或1.0运行)会导致第一次提交整个repo:(我感觉我们越来越近了……
git rev list branch-not master
没有输出任何内容。
git rev-list --reverse --topo-order --left-right --boundary 1.0...master | 
    grep "^>" -B1 |
    head -1 |
    cut -c2-
git rev-list --reverse --topo-order --left-right --boundary 1.0...master | 
    grep "^>" |
    head -1 |
    cut -c2-