Don't add duplicate remote/branch name
diff --git a/tests/rules/test_git_push.py b/tests/rules/test_git_push.py
index c654b2aa4..785b08eed 100644
--- a/tests/rules/test_git_push.py
+++ b/tests/rules/test_git_push.py
@@ -29,7 +29,13 @@ def test_get_new_command(output):
         == "git push --set-upstream origin master"
     assert get_new_command(Command('git push -u origin', output))\
         == "git push --set-upstream origin master"
+    assert get_new_command(Command('git push origin', output))\
+        == "git push --set-upstream origin master"
     assert get_new_command(Command('git push --set-upstream origin', output))\
         == "git push --set-upstream origin master"
     assert get_new_command(Command('git push --quiet', output))\
         == "git push --set-upstream origin master --quiet"
+    assert get_new_command(Command('git push --quiet origin', output))\
+        == "git push --set-upstream origin master --quiet"
+    assert get_new_command(Command('git -c test=test push --quiet origin', output))\
+        == "git -c test=test push --set-upstream origin master --quiet"
diff --git a/thefuck/rules/git_push.py b/thefuck/rules/git_push.py
index c5f49a5cc..e11938bae 100644
--- a/thefuck/rules/git_push.py
+++ b/thefuck/rules/git_push.py
@@ -32,10 +32,12 @@ def get_new_command(command):
         # In case of `git push -u` we don't have next argument:
         if len(command_parts) > upstream_option_index:
             command_parts.pop(upstream_option_index)
-    # If the only argument is the remote/branch, remove it.
-    # git's suggestion includes it, so it won't be lost, and we would duplicate it otherwise.
-    elif len(command_parts) is 3 and command_parts[2][0] != '-':
-        command_parts.pop(2)
+    else:
+        # the only non-qualified permitted options are the repository and refspec; git's
+        # suggestion include them, so they won't be lost, but would be duplicated otherwise.
+        push_idx = command_parts.index('push') + 1
+        while len(command_parts) > push_idx and command_parts[len(command_parts) - 1][0] != '-':
+            command_parts.pop(len(command_parts) - 1)
 
     arguments = re.findall(r'git push (.*)', command.output)[0].strip()
     return replace_argument(" ".join(command_parts), 'push',

@josephfrazier this should cover all of the corner cases for #745 