bas*_*ero 17 tags git methodology branch release-management
更新:示例存储库,https://github.com/so-gitdemo/so-gitdemorepo
在github repo的上下文中.如何轻松找到rev"b0430cee"?我知道我可以看一下,但这个存储库模仿的真实例子有十几个提交者和多个其他分支.不太容易使用检查.
当分支多次合并时,如何找到分支创建修订?
我知道这个问题:如何确定何时创建Git分支?
该解决方案似乎不适用于已多次合并的分支.我们通常将错误修复从发布分支合并到主分支.也许我们甚至把这部分做错了......对git来说还是新手.
想象一下以下简单.真实的东西在多个人的主/分支上有更多的提交.还有几个发布分支(想想1.0,1.1,1.2,1.3)
Future dev ?
|
|
Merge 1.0 back * ? Potential future fixes
|\ |
| \|
| \
New work * |
| * Emergency bug fix
| |
Merge 1.0 back * |
|\ |
| \|
| * Another bug fix
| |
| |
New feature * * First bugfix on branch 1.0
| /
| /
|/
* Feature
|
|
|
* Some feature
|
|
|
* The past (master)
Run Code Online (Sandbox Code Playgroud)
我们仍然是git的新手,并且正在制定管理版本和分支的最佳方法,我们已经决定我们需要追溯性地向repo添加一些标签.例如1.0分支用于1.0分支的开始,后来1.0.1标记用于修复版本.
后续奖金问题:添加我想要的标签的最佳方法是什么?我应该在哪个版本上标记?首先提交新分支?或分支提交前的第一个常见提交?
在阅读这个问题时,我会对你所提出的问题进行一些反复的讨论.
如果你真的只想要一个分支的根,我想你想要的东西就像
git rev-list --merges --boundary branch1 branch2 | tail -1
Run Code Online (Sandbox Code Playgroud)
如果您想验证分支实际上是相关的
git rev-list --left-right --merges --boundary branch1 branch2 |
grep '^-' |
tail -1 |
cut -c2-
Run Code Online (Sandbox Code Playgroud)
但是,机会是相当高,你想
git merge-base branch1 branch2
Run Code Online (Sandbox Code Playgroud)
此外,下次您需要漂亮的燕尾图时,以下内容将证明是有用的:
git show-branch # [--mergebase] branch1 branch2
Run Code Online (Sandbox Code Playgroud)
您可以使用git log获得更多控制:
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
Run Code Online (Sandbox Code Playgroud)
--decorate如果您喜欢显示分支名称,Git日志也支持该选项git show-branch
既然你添加了一个git repo ...我远程工作以测试内容.
如何轻松找到rev"b0430cee"?
在那种情况下,这个漂亮的oneliner为我做了这个工作:
git rev-list --reverse --topo-order --left-right --boundary 1.0...master |
grep "^>" -B1 |
head -1 |
cut -c2-
Run Code Online (Sandbox Code Playgroud)
如果你想获得469c14a1fa8a40237700(New feature work),这对我有用:
git rev-list --reverse --topo-order --left-right --boundary 1.0...master |
grep "^>" |
head -1 |
cut -c2-
Run Code Online (Sandbox Code Playgroud)
HTH
也许我误解了这个问题,但分支是由其尖端的提交定义的,并且该提交的每个祖先都包含在分支中。例如,假设emergency-bug-fix有一个分支,其尖端位于Emergency bug fix您的图中 - 该分支上最旧的提交将是The past (master)。如果您只查看提交图,“创建分支的修订版”并不是一个明确定义的概念。
如果您只关心何时在特定存储库中创建分支,则可以使用“reflog” - 例如,查看以下输出中的最后一行:
git reflog show emergency-bug-fix
Run Code Online (Sandbox Code Playgroud)
但是,该命令的结果因存储库而异,具体取决于引用的创建时间(例如通过获取或推送)。此外,默认情况下,reflog 条目会在 90 天后过期,它可能不再包含该信息。如果您有一个受祝福的中央存储库,您可以在那里进行相同的尝试,这可能会为您提供在中央存储库中首次创建该引用的提交。但是,我认为这不是您想要的解决方案。
正如您已经正确计算出的那样,最好只在提交图中标记您感兴趣的点。Magnus Skog 的答案告诉您如何做到这一点。