diff --git a/CHANGELOG b/CHANGELOG
index ee12d2a1f44e36faa873cba16ba944cedb072938..a86ac099aa8fba3973561066eccf13f799d5f209 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,4 @@
 v3.0.0
-  - Remove list-remote-tags command (Robert Schilling)
   - Remove rm-tag command (Robert Schilling)
   - Remove create-branch and rm-branch commands (Robert Schilling)
   - Update PostReceive worker so it logs a unique JID in Sidekiq
diff --git a/lib/gitlab_projects.rb b/lib/gitlab_projects.rb
index bc98e09b25cac1a86ceef5160ad1b75c510b9882..f0e077372c2478d8fccf2ff2c4007b942d533515 100644
--- a/lib/gitlab_projects.rb
+++ b/lib/gitlab_projects.rb
@@ -61,6 +61,7 @@ class GitlabProjects
     when 'update-head'; update_head
     when 'push-branches'; push_branches
     when 'delete-remote-branches'; delete_remote_branches
+    when 'list-remote-tags'; list_remote_tags
     when 'gc'; gc
     else
       $logger.warn "Attempt to execute invalid gitlab-projects command #{@command.inspect}."
@@ -71,6 +72,27 @@ class GitlabProjects
 
   protected
 
+  def list_remote_tags
+    remote_name = ARGV.shift
+
+    tag_list, exit_code, error = nil
+    cmd = %W(git --git-dir=#{full_path} ls-remote --tags #{remote_name})
+
+    Open3.popen3(*cmd) do |stdin, stdout, stderr, wait_thr|
+      tag_list  = stdout.read
+      error     = stderr.read
+      exit_code = wait_thr.value.exitstatus
+    end
+
+    if exit_code.zero?
+      puts tag_list
+      true
+    else
+      puts error
+      false
+    end
+  end
+
   def push_branches
     remote_name = ARGV.shift