diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb
index 42dde83152798666b9d3d8aeeefa9f41c2db21f8..08dfdcd78fe509a66b84a58e9754f165ba784f93 100644
--- a/Library/Homebrew/download_strategy.rb
+++ b/Library/Homebrew/download_strategy.rb
@@ -98,11 +98,12 @@ class AbstractDownloadStrategy
 end
 
 class VCSDownloadStrategy < AbstractDownloadStrategy
-  REF_TYPES = [:branch, :revision, :revisions, :tag].freeze
+  REF_TYPES = [:tag, :branch, :revisions, :revision].freeze
 
   def initialize name, resource
     super
     @ref_type, @ref = extract_ref(meta)
+    @revision = meta[:revision]
     @clone = HOMEBREW_CACHE.join(cache_filename)
   end
 
@@ -119,6 +120,15 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
     else
       clone_repo
     end
+
+    if @ref_type == :tag && @revision && current_revision
+      unless current_revision == @revision
+        raise <<-EOS.undent
+          #{@ref} tag should be #{@revision}
+          but is actually #{current_revision}!
+        EOS
+      end
+    end
   end
 
   def stage
@@ -153,6 +163,9 @@ class VCSDownloadStrategy < AbstractDownloadStrategy
   def update
   end
 
+  def current_revision
+  end
+
   def extract_ref(specs)
     key = REF_TYPES.find { |type| specs.key?(type) }
     return key, specs[key]
@@ -570,6 +583,10 @@ class GitDownloadStrategy < VCSDownloadStrategy
     quiet_system 'git', '--git-dir', git_dir, 'rev-parse', '-q', '--verify', "#{@ref}^{commit}"
   end
 
+  def current_revision
+    Utils.popen_read('git', '--git-dir', git_dir, 'rev-parse', '-q', '--verify', "HEAD").strip
+  end
+
   def repo_valid?
     quiet_system "git", "--git-dir", git_dir, "status", "-s"
   end