我们在git中使用标签作为部署过程的一部分.有时,我们希望通过从远程存储库中删除它们来清理这些标记.
这非常简单.一个用户在一组命令中删除本地标签和远程标签.我们有一个结合了两个步骤的小shell脚本.
第二个(第3个,第4个......)用户现在拥有不再反映在遥控器上的本地标签.
我正在寻找一个类似于git remote prune origin清除本地跟踪已删除远程分支的分支的命令.
或者,可以使用列出远程标记的简单命令来比较通过返回的本地标记git tag -l.
我今天最终得到了一个独立的头,同样的问题如下所述:git push说一切都是最新的,即使我有本地更改
据我所知,我没有做任何与众不同的事情,只是从我当地的回购中提交和推送.
那我怎么最终得到一个detached HEAD?
我希望git列出所有标签以及完整的注释或提交消息.这样的事情很接近:
git tag -n5
Run Code Online (Sandbox Code Playgroud)
这正是我想要的,除了它只显示标签消息的前5行.
我想我可以使用非常大的数字.我在这里可以使用的最高数字是多少?每台电脑都一样吗?
更新:我有很多时间考虑这个问题,现在我认为如果它非常长,我不一定要展示整个信息.这样的事似乎适合我:
git tag -n99
Run Code Online (Sandbox Code Playgroud)
如果标签消息真的超过99行,我不想看到所有这些.但是Git极其复杂和灵活.在什么情况下,这不是最好的解决方案?我注意到许多已发布的解决方案都使用了-lotion,但这不只是指定要搜索的模式吗?
我们的git存储库中有几个带注释的标签.较旧的标签有伪造的消息,我们想要更新为我们的新风格.
% git tag -n1
v1.0 message
v1.1 message
v1.2 message
v2.0 Version 2.0 built on 15 October 2011.
Run Code Online (Sandbox Code Playgroud)
在此示例中,我们希望使v1.x消息看起来像v2.0消息.有谁知道我们会怎么做?
运行以下步骤后出现以下错误:
To git@provider.com:username/repo-name.git
! [rejected] dev -> dev (already exists)
error: failed to push some refs to 'git@provider.com:username/repo-name.git'
hint: Updates were rejected because the tag already exists in the remote.
Run Code Online (Sandbox Code Playgroud)
dev:git tag devgit push --tags删除标签dev,再次创建并推送标签:
git tag -d dev
git tag dev
git push --tags
Run Code Online (Sandbox Code Playgroud)为什么会这样?
我在Mac上.我使用Linux(Ubuntu)的朋友没有这个问题.我知道我可以git push --tags -f用来强制标记更新,但这很危险(例如,只在标记中重写提交,而不是在分支中).
我查看了所有其他模棱两可的refname问题,但它们似乎都没有帮助.为什么我收到这个警告?
$ git checkout master
warning: refname 'master' is ambiguous.
$ git show-ref master
eef61c00da690f093063ac5a728e22fd21648104 refs/heads/master
$ git branch -a
checkers
exercises
* master
$ git remote -v
$
Run Code Online (Sandbox Code Playgroud) 有没有办法让我的本地git标签与遥控器的标签保持同步?也就是说 - 不仅在创建时获得新标签(像往常一样,在fetch-ing/pull-ing时),而且还不再在遥控器上修剪标签,并在其他人git push -f的标签时删除现有标签.我知道我可以git fetch remotename遵循git remote prune remotename以实现分支的类似行为.
我有一个Github repo并在其上推送标签.
这是我主要项目的gradle文件.
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.0"
defaultConfig {
applicationId "dropbox.ric.es.myapplication"
minSdkVersion 16
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
repositories {
//mavenCentral()
//jcenter()
maven { url "https://jitpack.io" }
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.github.rchampa:DropboxHttpConector:1.0.1'
}
Run Code Online (Sandbox Code Playgroud)
但是当我同步gradle时,我有以下错误 Failed to resolve com.github.rchampa:DropboxHttpConector:1.0.1
另一种尝试:
allprojects {
repositories {
jcenter()
maven { url "https://jitpack.io" }
}
}
dependencies …Run Code Online (Sandbox Code Playgroud) 我一直在努力将我们的9个项目在一个SVN仓库中移动到9个独立的git repos,由gitolite在服务器上管理,然后关闭SVN.其中七个很容易,因为他们没有分支或标签所以在我的工作站上我能够做一个简单的事情:
git svn clone --stdlayout --no-metadata -A svnauthors.txt svn+ssh://user@host/var/subversion/project tempProject
Run Code Online (Sandbox Code Playgroud)
然后从我的工作站推送到gitolite服务器:
git remote add origin ssh://gitolite@host/project
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
他们一直都很努力.现在最后两个项目更加困难,每个项目大约有30个标签/分支.在上面的其中一个项目中运行'git svn clone'后,我看到:
$ git branch -a
* master
remotes/BatchUpload
remotes/clarify_breadcrumb
remotes/contact_type
remotes/contact_upload_improvements
remotes/file_cabinet
remotes/mobile
remotes/summary_tiles
remotes/summary_updates
remotes/tags/release-2.1.2
remotes/tags/release-3.0.1
remotes/tags/release-3.0.2
remotes/tags/release-3.0.2c
remotes/tags/release-3.1.1
remotes/tags/release-3.1.3
remotes/tags/release-3.1.4
remotes/tags/release-3.1.5
remotes/tags/release-3.1.5.UPDT
remotes/tags/release-3.2
remotes/tags/release-3.2.1
remotes/tags/release-3.2.2.1
remotes/tags/release-3.2.3
remotes/tags/release-3.2.4
remotes/tags/release-3.2.6
remotes/tags/release-3.2.7
remotes/tags/release-3.2.7.1
remotes/trunk
remotes/user_man_batch_upload
remotes/user_management
Run Code Online (Sandbox Code Playgroud)
现在我如何将所有这些标签/分支下载到我的本地工作站,以便我可以通过gitolite推送它们并永久关闭SVN服务器?我需要在本指南中做些什么,为每个分支和标记执行'git checkout -b'?我应该使用svn2git或其他工具吗?
在这个问题中,如何重命名 Git 标签?给出了重命名旧标签的说明。
我想知道这些步骤将保留已编辑标签中的原始日期。
例如,在我的gitrepo 中,git tag命令显示:
v0.1
v1.0.0-beta
Run Code Online (Sandbox Code Playgroud)
和 Github 显示:

我想将旧v0.1标签更新为更具描述性的v1.0.0-alpha(也遵循语义版本控制指南),但我也想保留原始日期(2013 年 12 月 4 日)。
是否可以使用上述问题的答案中给出的命令?据我了解,这些将是我的情况下的命令:
git tag v1.0.0-alpha v0.1
git tag -d v0.1
git push origin :refs/tags/v0.1
git push --tags
Run Code Online (Sandbox Code Playgroud) 我有一个git存储库,其中包含许多格式为“ v1.2.3-rc-4”的标签,我想将其自动重命名为“ 1.2.3-rc4”。标记同时存在于本地和远程存储库中。
我要澄清的是,版本号中的数字部分应视为变量。以上值仅用于说明标签的格式。
有没有办法自动执行此更改?
我有一个包含三个注释标签本地的Git仓库:v0.1.0,v0.1.1,和v0.1.2.
当我使用gitk(Repository→Visualize master的历史记录)查看项目的历史记录时,我可以看到每个标记分配给正确的提交.
但是,当我尝试在Git GUI(分支→结帐...→标签)中签出我的标签时,标签v0.1.1不会出现.
当我去检查gitk中的每个标签时,我注意到标签的细节略有不同.详细信息v0.1.0并将v0.1.2其列为type commit,而标记v0.1.1列为type tag.
值得注意的是,我在这个标签上重写了历史.为了修复我的标签描述中的拼写错误,我使用了编辑标签消息git tag <tag name> <tag name> -f -m "<new message>".
v0.1.1在使用Git GUI结账时,为什么我看不到我的标签?它为什么显示为type tag?