diff --git a/lib/git-process.rb b/lib/git-process.rb
index <HASH>..<HASH> 100644
--- a/lib/git-process.rb
+++ b/lib/git-process.rb
@@ -54,10 +54,20 @@ module Git
       lib.fetch
 
       current_branch = lib.current_branch
-      rebase("origin/#{current_branch}")
+      remote_branch = "origin/#{current_branch}"
+      old_sha = lib.command('rev-parse', remote_branch)
+
+      rebase(remote_branch)
       rebase(Process::remote_master_branch)
 
       unless current_branch == Process::master_branch
+        lib.fetch
+        new_sha = lib.command('rev-parse', remote_branch)
+        unless old_sha == new_sha
+          logger.warn("'#{current_branch}' changed on '#{Process::server_name}'"+
+            " [#{old_sha[0..5]}->#{new_sha[0..5]}]; trying sync again.")
+          sync_with_server
+        end
         lib.push(Process::server_name, current_branch, current_branch, :force => true)
       else
         logger.warn("Not pushing to the server because the current branch is the master branch.")
Adds more safety to Git::Process.sync_with_server

Rebases against its own branch first, then double-checks to make sure the branch hasn't changed before doing the forced push.