diff --git a/pkg/manifestgen/sync/options.go b/pkg/manifestgen/sync/options.go
index 71da1e47e0abb48a79c3655d4644a4c66c28336c..7085d56e41234fac79a327157ccfdd80ad219ab1 100644
--- a/pkg/manifestgen/sync/options.go
+++ b/pkg/manifestgen/sync/options.go
@@ -26,6 +26,9 @@ type Options struct {
 	Name              string
 	Namespace         string
 	Branch            string
+	Tag               string
+	SemVer            string
+	Commit            string
 	Secret            string
 	TargetPath        string
 	ManifestFile      string
diff --git a/pkg/manifestgen/sync/sync.go b/pkg/manifestgen/sync/sync.go
index b2557208164778380f5587d450372cf5932a346c..665cae16bb401db533bd474bfe78a8e8c457fa51 100644
--- a/pkg/manifestgen/sync/sync.go
+++ b/pkg/manifestgen/sync/sync.go
@@ -35,6 +35,20 @@ import (
 
 func Generate(options Options) (*manifestgen.Manifest, error) {
 	gvk := sourcev1.GroupVersion.WithKind(sourcev1.GitRepositoryKind)
+	gitRef := &sourcev1.GitRepositoryRef{}
+	if options.Branch != "" {
+		gitRef.Branch = options.Branch
+	}
+	if options.Tag != "" {
+		gitRef.Tag = options.Tag
+	}
+	if options.SemVer != "" {
+		gitRef.SemVer = options.SemVer
+	}
+	if options.Commit != "" {
+		gitRef.Commit = options.Commit
+	}
+
 	gitRepository := sourcev1.GitRepository{
 		TypeMeta: metav1.TypeMeta{
 			Kind:       gvk.Kind,
@@ -49,9 +63,7 @@ func Generate(options Options) (*manifestgen.Manifest, error) {
 			Interval: metav1.Duration{
 				Duration: options.Interval,
 			},
-			Reference: &sourcev1.GitRepositoryRef{
-				Branch: options.Branch,
-			},
+			Reference: gitRef,
 			SecretRef: &meta.LocalObjectReference{
 				Name: options.Secret,
 			},