From bdc38b83f4a6d39603dc845755df49065a19d029 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Fri, 17 Jul 2015 13:58:28 -0700 Subject: [PATCH] Always add '--' to git reset If a git repo has the misfortune to have a file with the name "HEAD" at the root level of the repo, git will return an error because it is unsure whether the file or ref is meant: File "/usr/local/lib/python2.7/dist-packages/git/refs/head.py", line 81, in reset self.repo.git.reset(mode, commit, add_arg, paths, **kwargs) File "/usr/local/lib/python2.7/dist-packages/git/cmd.py", line 440, in return lambda *args, **kwargs: self._call_process(name, *args, **kwargs) File "/usr/local/lib/python2.7/dist-packages/git/cmd.py", line 834, in _call_process return self.execute(make_call(), **_kwargs) File "/usr/local/lib/python2.7/dist-packages/git/cmd.py", line 627, in execute raise GitCommandError(command, status, stderr_value) GitCommandError: 'git reset --hard HEAD' returned with exit code 128 stderr: 'fatal: ambiguous argument 'HEAD': both revision and filename Use '--' to separate filenames from revisions' Implement its suggested fix by always passing '--' as an argument to "git reset". It is fine to pass it with no file specifiers afterwords. In that case, git knows that "HEAD" is always meant as the ref. --- git/refs/head.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/git/refs/head.py b/git/refs/head.py index 18dac3497..06207e0ad 100644 --- a/git/refs/head.py +++ b/git/refs/head.py @@ -55,7 +55,6 @@ def reset(self, commit='HEAD', index=True, working_tree=False, :return: self""" mode = "--soft" - add_arg = None if index: mode = "--mixed" @@ -73,12 +72,8 @@ def reset(self, commit='HEAD', index=True, working_tree=False, # END working tree handling - if paths: - add_arg = "--" - # END nicely separate paths from rest - try: - self.repo.git.reset(mode, commit, add_arg, paths, **kwargs) + self.repo.git.reset(mode, commit, '--', paths, **kwargs) except GitCommandError as e: # git nowadays may use 1 as status to indicate there are still unstaged # modifications after the reset