如何在Git中标记旧提交?

7vhp5slm  于 2022-11-20  发布在  Git
关注(0)|答案(8)|浏览(219)

我们是git的新手,我想在仓库的开头设置一个标签。我们的生产代码和初始仓库的代码是一样的,但是我们已经提交过了。在仓库的开头设置一个标签可以让我们把生产代码“回滚”到一个已知的稳定状态。
那么,如何给一个任意的旧提交添加标签呢?

k97glaaz

k97glaaz1#

示例:

git tag -a v1.2 9fceb02 -m "Message here"

其中9fceb02是提交ID的开始部分。
然后可以使用git push origin v1.2推送标记。
你可以执行git log来显示当前分支中的所有提交id。
在Pro Git的书中也有一个关于tagging的很好的章节。

**警告:**这将创建带有 * 当前日期 * 的标签(例如,该值将显示在GitHub发布页面上)。如果您希望标签的日期与提交日期相同,请查看another answer

vxqlmq5t

vxqlmq5t2#

只有代码

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# push to origin
git push origin --tags

# set HEAD back to whatever you want it to be
git checkout master

详细信息

@dkinzer的回答会创建日期为当前日期(当你运行git tag命令时)的标签,而不是提交日期。tag的Git帮助有一节“关于回溯标签”,内容如下:

  • 如果您已经从另一个VCS导入了一些更改,并且希望为您的作品的主要版本添加标记,则能够指定要嵌入标记对象内部的日期是非常有用的;标签对象中的此类数据影响例如gitweb界面中标签的排序。
  • 要设置将来标记对象中使用的日期,请设置环境变量GIT_COMMITTER_DATE(参见后面对可能值的讨论;最常用格式是“YYYY-MM-DD HH:MM”)。*
  • 例如:*
$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

页面 “如何在Git中添加标签” 向我们展示了我们可以通过以下方式提取HEAD提交的时间:

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

我们可以通过以下方式提取特定提交的日期:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

但是,与其重复提交两次,不如将HEAD更改为该提交,并在两个命令中隐式使用它:

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
8e2ybdfx

8e2ybdfx3#

最简单的方法是:

git tag v1.0.0 f4ba1fc
git push origin --tags

其中f4ba1fc是要标记的提交的哈希的开始,v1.0.0是要标记的版本。

nmpmafwu

nmpmafwu4#

好的,您只需执行以下操作:

git tag -a <tag> <commit-hash>

所以如果你想添加**tag:**1.0.2来提交e50f795,只需简单地执行以下操作:

git tag -a 1.0.2 e50f795

另外,您还可以使用-m在结尾处添加一条消息,内容如下:

git tag -a 1.0.2 e50f795 -m "my message"

毕竟,您需要将其推送到remote,为此,只需执行以下操作:

git push origin 1.0.2

如果您有许多不想一一提及的标签,只需简单地执行以下操作:

git push origin --tags

将所有标签推到一起。
此外,我还创建了下图中的步骤,以更清楚地说明这些步骤:

您还可以在Hub中添加标记,或者使用SourceTree等工具添加标记,为了避免前面的步骤,在本例中,我登录到我的Bitbucket,并从那里进行添加:
1.转到您的分支,找到您想要添加标记的commit,然后点击它:

1.在提交页面的右侧,找到显示No tags的位置,然后单击+图标:

1.在标记名称框中,添加标记:

1.现在您可以看到标记已成功创建:


指令集

bd1hkmkf

bd1hkmkf5#

这是一个老问题,答案已经给出了所有的工作,但也有一个新的选择,可以考虑.
如果你使用SourceTree来管理git仓库,你可以右键点击任何提交并添加一个标记。再鼠标点击一次,你也可以将标记直接发送到origin上的分支。

hfwmuf9z

hfwmuf9z6#

基于其他人的答案,这里有一个简单的解决方案,它将标记日期设置为实际发生的时间,使用带注解的标记,并且不需要git checkout

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git push --tags origin master

其中tag被设置为期望的标签串,并且commit被设置为提交散列。

vm0i2vca

vm0i2vca7#

@Phrogz的answer很棒,但在Windows上不起作用。下面是如何使用Powershell标记一个旧提交的原始日期:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
4dc9hkyq

4dc9hkyq8#

要为特定提交创建标记,请首先打印提交ID,以查看要向其添加标记的提交

git log --online

输出将如下所示

dee93fc update App.js
c691fa2 autherization to roles
559528a modify depart
6aa4ad4 edit project page

选择要添加标记的提交ID并为提交ID git checkout

git checkout 6aa4ad4

并为提交添加标记

git tag v1.0

然后回到你的分支做好这个标记后

git checkout branchName

查看所有标记

git tag

相关问题