min*_*hua 7 tags git github git-branch
我从https://github.com/eclipse/mosquitto克隆了mosquitto repo .它包含一个标签v1.4.9.然而,它看起来不像是在一个分支上.
怎么会发生这种情况?作者是否真的在自己的仓库中保留了一个分支,但只将标签从该分支推送到github?或者他只是提交标签?
我把标签变成了一个本地分支:
$ git checkout -b work149 v1.4.9
Run Code Online (Sandbox Code Playgroud)
并查看了分支上的最后一次提交:
$ git log -1
commit 91bfd82491f90e24b6fe9c036f0b04a1f5c14a89
Merge: bf959ef 2d0af73
Author: Roger A. Light <roger@atchoo.org>
Date: Thu Jun 2 22:05:34 2016 +0100
Merge branch 'fixes'
Run Code Online (Sandbox Code Playgroud)
此提交不仅仅是fixes分支.
或者git log --graph我可以看到同一分支上的早期提交(不是fixes分支,而是我试图理解的分支):
* | commit bf959ef9b0ae0e4d74bf80158ffb0b7c69da533d
|\ \ Merge: 646e0a0 5cca6b4
| |/ Author: Roger A. Light <roger@atchoo.org>
| | Date: Sun Feb 14 14:38:42 2016 +0000
| |
| | Merge branch 'fixes'
| |
Run Code Online (Sandbox Code Playgroud)
如何确定标签是在分支上还是在哪个分支上?最左边的垂直条是否表示分支,遥控器上的分支在哪里?
这是一种常见做法吗?
从讨论线程"Git pull没有得到标签"提及git clone和v1.4.9.我想知道这个推荐是否fixes让克隆不跟踪遥控器上的所有分支,或者repo以某种方式使标签成为非提交?
Gre*_*con 12
我的猜测是作者可能有一个包含91bfd82491f的分支,标记了提交,推送了标签,然后删除了分支.你也是正确的,作者可能有一个本地分支指向同一个提交,但只推送了标签,而不是分支.
检查哪个部门或分支包含v1.4.9使用
git branch -a --contains v1.4.9
Run Code Online (Sandbox Code Playgroud)
运行该命令不会产生任何输出,这会确认它不在自己的分支上.相比之下,寻找v1.4.8:
$ git branch -a --contains v1.4.8
* master
remotes/origin/HEAD -> origin/master
remotes/origin/debian
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
在任何分支之外直接创建标记提交的一种方法是使用分离的HEAD操作,即HEAD不引用命名分支的地方.在mosquitto克隆中,你可以通过跑步到达那里
git checkout v1.4.9
Run Code Online (Sandbox Code Playgroud)
这会给你一个健谈的警告.
Note: checking out 'v1.4.9'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example: git checkout -b <new-branch-name> HEAD is now at 91bfd82... Merge branch 'fixes'
此时,git将创建更多提交.例如:
$ touch look-ma-no-branch ; git add look-ma-no-branch
$ git commit -m 'Look, Ma! No branch!'
[detached HEAD 51a0ac2] Look, Ma! No branch!
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 look-ma-no-branch
Run Code Online (Sandbox Code Playgroud)
这个新提交51a0ac2在任何分支上都不存在,我们可以确认.
$ git branch -a --contains 51a0ac2
* (HEAD detached from v1.4.9)
Run Code Online (Sandbox Code Playgroud)
为了好玩,让我们也标记它.
git tag -a -m 'Tag branchless commit' v1.4.9.1
Run Code Online (Sandbox Code Playgroud)
切换回master分支git checkout master,我们可以使用git lola(别名git log --graph --decorate --pretty=oneline --abbrev-commit --all)来查看新标签看起来与其祖先类似.
$ git lola * 51a0ac2 (tag: v1.4.9.1) Look, Ma! No branch! * 91bfd82 (tag: v1.4.9) Merge branch 'fixes' |\ | | * 1cd4092 (origin/fixes) [184] Don't attempt to install docs when WITH_DOCS=no. | | * 63416e6 ; | | * 5d96c3d [186] Fix TLS operation with websockets listeners and libwebsockts 2.x. | |/ | * 2d0af73 Bump version number. | | * 8ee1ad8 (origin/coverity-fixes) Merge branch 'fixes' into coverity-fixes [...]
使用确认它在无分支上存在
git branch -a --contains v1.4.9.1
Run Code Online (Sandbox Code Playgroud)
因为你问,不,这根本不是一个常见的git工作流程.
小智 6
我错误地做了一些类似的事情:我要推出一个新版本,我在PC上提交了所有内容并添加了标签。
然后我做了git push --tags,错误地认为它将推动master分支和标签。然后,我在github上创建了一个发行版。该版本指向最后的更改,但master分支落后了。我不得不再次推动,这一切都对齐了。
值得注意的是,所有文件实际上都是使用第一个命令推送的(我从输出中看到了它,您知道:创建增量等)。在第二次推送中,传输的字节报告为0,所以我猜只有分支元数据被推送了。
| 归档时间: |
|
| 查看次数: |
4854 次 |
| 最近记录: |