diff --git a/buildroot/share/git/mfpub b/buildroot/share/git/mfpub
index dff24f9c611..9a3e1caa6fd 100755
--- a/buildroot/share/git/mfpub
+++ b/buildroot/share/git/mfpub
@@ -35,7 +35,7 @@ fi
 echo "Stashing any changes to files..."
 echo "Don't forget to update and push 'master'!"
 # GOJF Card
-git stash
+[[ $(git stash) != "No local "* ]] && HAS_STASH=1
 
 COMMIT=$( git log --format="%H" -n 1 )
 
@@ -46,16 +46,26 @@ git clean -d -f
 if [[ $BRANCH == "master" ]]; then
 
   # Don't lose upstream changes!
-  mfup
+  git fetch upstream
 
-  # Allow working directly with the main fork
-  echo
-  echo -n "Pushing to origin/master... "
-  git push -f origin
+  # Rebase onto latest master
+  if git rebase upstream/master; then
 
-  echo
-  echo -n "Pushing to upstream/master... "
-  git push -f upstream
+    # Allow working directly with the main fork
+    echo
+    echo -n "Pushing to origin/master... "
+    git push -f origin
+
+    echo
+    echo -n "Pushing to upstream/master... "
+    git push -f upstream
+
+  else
+
+    echo "Merge conflicts? Stopping here."
+    exit
+
+  fi
 
 else
 
@@ -114,6 +124,4 @@ rm -rf ${TMPFOLDER}
 # Go back to the branch we started from
 git checkout $BRANCH
 
-if [[ $BRANCH != "master" ]]; then
-  git stash pop
-fi
+[[ $HAS_STASH == 1 ]] && git stash pop
diff --git a/buildroot/share/git/mfup b/buildroot/share/git/mfup
index 88b564f9fb5..132c36b3b49 100755
--- a/buildroot/share/git/mfup
+++ b/buildroot/share/git/mfup
@@ -38,6 +38,8 @@ if [[ $BRANCH != $TARG ]]; then
   else
     echo "No such branch!"
   fi
+else
+  git reset --hard upstream/$TARG
 fi
 
 echo