我们是git的新手,我想在存储库的开头设置一个标记。 我们的生产代码与开始的存储库相同,但我们从那时起就进行了提交。 一开始的标签将允许我们将生产“回滚”到已知的稳定状态。

那么,如何向任意的旧提交添加标记呢?


当前回答

最简单的方法是:

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

f4ba1fc是要标记的提交的散列的开始,v1.0.0是要标记的版本。

其他回答

这是一个老问题,答案已经给出了所有的工作,但也有一个新的选项可以考虑。

如果你使用SourceTree来管理你的git仓库,你可以右键单击任何提交并添加一个标签。再点击一次鼠标,你也可以将标签直接发送到原点的分支。

要标记特定的提交,请先打印提交散列,以查看要向其添加标记的提交

git log --oneline

输出如下所示:

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

选择你想要添加标签的提交id, git checkout为提交id

git checkout 6aa4ad4

并为那个提交添加标签

git tag v1.0

并返回你的分支后,使这个标签

git checkout branchName

查看所有标签

git tag

在其他人的答案的基础上,这里是一个一行程序的解决方案,设置标签日期为实际发生的时间,使用带注释的标签,不需要git签出:

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被设置为所需的标记字符串,并提交到提交散列。

最简单的方法是:

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

f4ba1fc是要标记的提交的散列的开始,v1.0.0是要标记的版本。

只是代码

# 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命令时),而不是提交的日期。Git帮助标签有一个部分“关于回溯标签”,它说:

If you have imported some changes from another VCS and would like to add tags for major releases of your work, it is useful to be able to specify the date to embed inside of the tag object; such data in the tag object affects, for example, the ordering of tags in the gitweb interface. To set the date used in future tag objects, set the environment variable GIT_COMMITTER_DATE (see the later discussion of possible values; the most common form is "YYYY-MM-DD HH:MM"). For example: $ 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更改为该commit,并在两个命令中隐式地使用它:

git checkout 9fceb02 

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