diff --git a/qa/qa/git/repository.rb b/qa/qa/git/repository.rb
index 0aa94101098bb289526fd6470b8a251b6dff804a..b3bad40a90f3bd5edbfca6a02d19ef3e49aecada 100644
--- a/qa/qa/git/repository.rb
+++ b/qa/qa/git/repository.rb
@@ -12,6 +12,7 @@ module QA
   module Git
     class Repository
       include Scenario::Actable
+      RepositoryCommandError = Class.new(StandardError)
 
       attr_writer :use_lfs
       attr_accessor :env_vars
@@ -205,6 +206,10 @@ module QA
         output.chomp!
         Runtime::Logger.debug "Git: output=[#{output}], exitstatus=[#{status.exitstatus}]"
 
+        unless status.success?
+          raise RepositoryCommandError, "The command #{command} failed (#{status.exitstatus}) with the following output:\n#{output}"
+        end
+
         Result.new(status.exitstatus == 0, output)
       end
 
diff --git a/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb b/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb
index 4464fb812b7fdf37f07fbd0e2e70ea9c419d5c7d..6aebd04af03b772cfbe9d46d009375d1e484969f 100644
--- a/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb
+++ b/qa/qa/specs/features/browser_ui/3_create/repository/push_protected_branch_spec.rb
@@ -37,12 +37,7 @@ module QA
         it 'user without push rights fails to push to the protected branch' do
           create_protected_branch(allow_to_push: false)
 
-          push = push_new_file(branch_name)
-
-          expect(push.output)
-          .to match(/remote\: GitLab\: You are not allowed to push code to protected branches on this project/)
-          expect(push.output)
-          .to match(/\[remote rejected\] #{branch_name} -> #{branch_name} \(pre-receive hook declined\)/)
+          expect { push_new_file(branch_name) }.to raise_error(QA::Git::Repository::RepositoryCommandError, /remote: GitLab: You are not allowed to push code to protected branches on this project\.([\s\S]+)\[remote rejected\] #{branch_name} -> #{branch_name} \(pre-receive hook declined\)/)
         end
       end
 
diff --git a/qa/spec/git/repository_spec.rb b/qa/spec/git/repository_spec.rb
index 62c81050bd95a99da99da361d8cfb4ab6d17155d..0ded33a73a268f485d50e0e202d3548784633aee 100644
--- a/qa/spec/git/repository_spec.rb
+++ b/qa/spec/git/repository_spec.rb
@@ -39,7 +39,7 @@ describe QA::Git::Repository do
 
     describe '#clone' do
       it 'is unable to resolve host' do
-        expect(repository.clone).to include("fatal: unable to access 'http://root@foo/bar.git/'")
+        expect { repository.clone }.to raise_error(described_class::RepositoryCommandError, /The command .* failed \(128\) with the following output/)
       end
     end
 
@@ -49,7 +49,7 @@ describe QA::Git::Repository do
       end
 
       it 'fails to push changes' do
-        expect(repository.push_changes).to include("error: failed to push some refs to 'http://root@foo/bar.git'")
+        expect { repository.push_changes }.to raise_error(described_class::RepositoryCommandError, /The command .* failed \(1\) with the following output/)
       end
     end