Reputation: 14545
We are new to Git, and I want to set a tag at the beginning of our repository. Our production code is the same as the beginning repository, but we've made commits since then. A tag at the beginning would allow us to "roll back" production to a known, stable state.
So how to add a tag to an arbitrary, older commit?
Upvotes: 1369
Views: 521724
Reputation: 3017
To tag a specific commit, print commits hashes first to view what commit that you want to add tag to it
git log --oneline
The output would like this:
dee93fc update App.js
c691fa2 autherization to roles
559528a modify depart
6aa4ad4 edit project page
Select commit id that you want to add tag to it and git checkout for commit id
git checkout 6aa4ad4
And add tag for that commit
git tag v1.0
And return to your branch After make this tag
git checkout branchName
To view all tags
git tag
Upvotes: 8
Reputation: 303520
# 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
The answer by @dkinzer creates tags whose date is the current date (when you ran the git tag
command), not the date of the commit. The Git help for tag
has a section "On Backdating Tags" which says:
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
The page "How to Tag in Git" shows us that we can extract the time of the HEAD commit via:
git show --format=%aD | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700
We could extract the date of a specific commit via:
GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"
However, instead of repeating the commit twice, it seems easier to just change the HEAD to that commit and use it implicitly in both commands:
git checkout 9fceb02
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
Upvotes: 272
Reputation: 4425
The simplest way to do this is:
git tag v1.0.0 f4ba1fc
git push origin --tags
with f4ba1fc
being the beginning of the hash of the commit you want to tag and v1.0.0
being the version you want to tag.
Upvotes: 236
Reputation: 104900
OK, You can simply do:
git tag -a <tag> <commit-hash>
So if you want to add tag: 1.0.2 to commit e50f795
, just simply do:
git tag -a 1.0.2 e50f795
Also you add a message at the end, using -m
, something like this:
git tag -a 1.0.2 e50f795 -m "my message"
After all, you need to push it to the remote
, to do that, simply do:
git push origin 1.0.2
If you have many tags which you don't want to mention them one by one, just simply do:
git push origin --tags
to push all tags together...
Also, I created the steps in the image below, for more clarification of the steps:
You can also dd the tag in Hub or using tools like SourceTree, to avoid the previous steps, I logged-in to my Bitbucket in this case and doing it from there:
No tags
and click on the +
icon:Upvotes: 75
Reputation: 33637
Example:
git tag -a v1.2 9fceb02 -m "Message here"
Where 9fceb02
is the beginning part of the commit id.
You can then push the tag using git push origin v1.2
.
You can do git log
to show all the commit id's in your current branch.
There is also a good chapter on tagging in the Pro Git book.
Warning: This creates tags with the current date (and that value is what will show on a GitHub releases page, for example). If you want the tag to be dated with the commit date, please look at another answer.
Upvotes: 2033
Reputation: 1612
The answer by @Phrogz is great, but doesn't work on Windows. Here's how to tag an old commit with the commit's original date using Powershell:
git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
Upvotes: 11
Reputation: 6561
Building upon the answers of the others, here is a one-liner solution that sets the tag date to when it actually happened, uses annotated tag and requires no 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
where tag
is set to the desired tag string, and commit
to the commit hash.
Upvotes: 7
Reputation: 4595
This is an old question, and the answers already given all work, but there's also a new option which can be considered.
If you're using SourceTree to manage your git repositories, you can right-click on any commit and add a tag to it. With another mouseclick you can also send the tag straight to the branch on origin.
Upvotes: 12