diff --git a/pkg/provider/git.go b/pkg/provider/git.go
index de8e6c5dfb99790c3dbbe31e972f0c6912268b17..9eea764ba1bf034a12826c5e18dc3641a9d7dd72 100644
--- a/pkg/provider/git.go
+++ b/pkg/provider/git.go
@@ -164,8 +164,17 @@ func (repo *Repository) GetReleases(rawRe string) ([]*semrel.Release, error) {
 }
 
 func (repo *Repository) CreateRelease(release *provider.CreateReleaseConfig) error {
+	hash := plumbing.NewHash(release.SHA)
+	if hash.IsZero() {
+		// hash is not valid, let's assume it is a branch name
+		resolvedRef, err := repo.repo.Reference(plumbing.NewBranchReferenceName(release.SHA), true)
+		if err != nil {
+			return err
+		}
+		hash = resolvedRef.Hash()
+	}
 	tag := fmt.Sprintf("v%s", release.NewVersion)
-	_, err := repo.repo.CreateTag(tag, plumbing.NewHash(release.SHA), &git.CreateTagOptions{
+	_, err := repo.repo.CreateTag(tag, hash, &git.CreateTagOptions{
 		Message: release.Changelog,
 		Tagger: &object.Signature{
 			Name:  repo.taggerName,
diff --git a/pkg/provider/git_test.go b/pkg/provider/git_test.go
index 5aa188e1592fe33cd16728cab80fbbc79902f803..c60ae50a279e7fde5d3e6255c90bc8391b3874f8 100644
--- a/pkg/provider/git_test.go
+++ b/pkg/provider/git_test.go
@@ -181,20 +181,37 @@ func createRelease(t *testing.T) {
 	head, err := gRepo.Head()
 	require.NoError(err)
 
-	err = repo.CreateRelease(&provider.CreateReleaseConfig{
-		NewVersion: "2.0.0",
-		SHA:        head.Hash().String(),
-		Changelog:  "new feature",
-	})
-	require.NoError(err)
+	testCases := []struct {
+		version, sha, changelog string
+	}{
+		{
+			version:   "2.0.0",
+			sha:       head.Hash().String(),
+			changelog: "new feature",
+		},
+		{
+			version:   "3.0.0",
+			sha:       "master",
+			changelog: "breaking change",
+		},
+	}
 
-	tagRef, err := gRepo.Tag("v2.0.0")
-	require.NoError(err)
+	for _, testCase := range testCases {
+		err = repo.CreateRelease(&provider.CreateReleaseConfig{
+			NewVersion: testCase.version,
+			SHA:        testCase.sha,
+			Changelog:  testCase.changelog,
+		})
+		require.NoError(err)
 
-	tagObj, err := gRepo.TagObject(tagRef.Hash())
-	require.NoError(err)
+		tagRef, err := gRepo.Tag("v" + testCase.version)
+		require.NoError(err)
 
-	require.Equal("new feature\n", tagObj.Message)
+		tagObj, err := gRepo.TagObject(tagRef.Hash())
+		require.NoError(err)
+
+		require.Equal(testCase.changelog+"\n", tagObj.Message)
+	}
 }
 
 func getReleases(t *testing.T) {