diff --git a/lib/banzai/filter/relative_link_filter.rb b/lib/banzai/filter/relative_link_filter.rb
index 46762d401fb9ce4deed8d8a9e0b829d9452b5db3..4fa8d05481f991cb7ba62c58f24d05abf2be635f 100644
--- a/lib/banzai/filter/relative_link_filter.rb
+++ b/lib/banzai/filter/relative_link_filter.rb
@@ -52,7 +52,7 @@ module Banzai
           relative_url_root,
           context[:project].path_with_namespace,
           uri_type(file_path),
-          ref || context[:project].default_branch,  # if no ref exists, point to the default branch
+          ref,
           file_path
         ].compact.join('/').squeeze('/').chomp('/')
 
@@ -116,7 +116,7 @@ module Banzai
       end
 
       def current_commit
-        @current_commit ||= context[:commit] || ref ? repository.commit(ref) : repository.head_commit
+        @current_commit ||= context[:commit] || repository.commit(ref)
       end
 
       def relative_url_root
@@ -124,7 +124,7 @@ module Banzai
       end
 
       def ref
-        context[:ref]
+        context[:ref] || context[:project].default_branch
       end
 
       def repository
diff --git a/spec/lib/banzai/filter/relative_link_filter_spec.rb b/spec/lib/banzai/filter/relative_link_filter_spec.rb
index bda8d2ce38a3dc9e80f36df0e7b9c5adf154639c..6b58f3e43ee1153f91461873052cfcd1a235d10d 100644
--- a/spec/lib/banzai/filter/relative_link_filter_spec.rb
+++ b/spec/lib/banzai/filter/relative_link_filter_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
 describe Banzai::Filter::RelativeLinkFilter, lib: true do
   def filter(doc, contexts = {})
     contexts.reverse_merge!({
-      commit:         project.commit,
+      commit:         commit,
       project:        project,
       project_wiki:   project_wiki,
       ref:            ref,
@@ -28,6 +28,7 @@ describe Banzai::Filter::RelativeLinkFilter, lib: true do
   let(:project)        { create(:project) }
   let(:project_path)   { project.path_with_namespace }
   let(:ref)            { 'markdown' }
+  let(:commit)         { project.commit(ref) }
   let(:project_wiki)   { nil }
   let(:requested_path) { '/' }
 
@@ -77,7 +78,13 @@ describe Banzai::Filter::RelativeLinkFilter, lib: true do
     expect { filter(act) }.not_to raise_error
   end
 
-  context 'with a valid repository' do
+  it 'ignores ref if commit is passed' do
+    doc = filter(link('non/existent.file'), commit: project.commit('empty-branch') )
+    expect(doc.at_css('a')['href']).
+      to eq "/#{project_path}/#{ref}/non/existent.file" # non-existent files have no leading blob/raw/tree
+  end
+
+  shared_examples :valid_repository do
     it 'rebuilds absolute URL for a file in the repo' do
       doc = filter(link('/doc/api/README.md'))
       expect(doc.at_css('a')['href']).
@@ -189,4 +196,13 @@ describe Banzai::Filter::RelativeLinkFilter, lib: true do
       include_examples :relative_to_requested
     end
   end
+
+  context 'with a valid commit' do
+    include_examples :valid_repository
+  end
+
+  context 'with a valid ref' do
+    let(:commit) { nil } # force filter to use ref instead of commit
+    include_examples :valid_repository
+  end
 end