You can checkout any arbitrary commit, including a tag (for instance: 'lw
'):
string commitPointer = refs/tags/lw;
var commit = repo.Lookup<Commit>(commitPointer);
Branch detachedHead = repo.Checkout(commitPointer);
You will be in a detached head though:
Assert.Equal("(no branch)", detachedHead.CanonicalName);
Assert.False(master.IsCurrentRepositoryHead);
Assert.True(repo.Info.IsHeadDetached);
But that HEAD does reference your tag:
Assert.True(detachedHead.IsCurrentRepositoryHead);
Assert.Equal(repo.Head, detachedHead);
Assert.Equal(commit.Sha, detachedHead.Tip.Sha);
Assert.True(repo.Head.IsCurrentRepositoryHead);
Assert.False(repo.Index.RetrieveStatus().IsDirty);
Assert.False(detachedHead.IsRemote);
Assert.Equal(detachedHead.Name, detachedHead.CanonicalName);
See more at "LibGit2Sharp.Tests/CheckoutFixture.cs#CanCheckoutAnArbitraryCommit()
"