Git alias da error pathspec

Intento diagnosticar un problema con un alias que permite a un usuario verificar la confirmación más reciente de un file para cambiar sus cambios más recientes. No quiero reiniciarlo, solo revise la versión anterior en una nueva ronda de commits.

También es importante no ramificar el repository completo a HEAD ^ si el nombre de un file no se entrega por error, de ahí que el -u cambie por sh (para estrangular si $ 1 no está lleno de algo).

Todos estamos trabajando en el mismo repository si eso es importante, y yo soy el único usuario que no es un novato completo, pero no soy un maestro del git de ninguna manera.

Estamos usando MsysGit 1.8.4 en Windows 7.

Aquí está el alias:

[alias] back1=!sh -uc 'git checkout HEAD^ $1 ' - 

Sin embargo, esto a veces da un error como

 $ git back0 format_tests.sas error: pathspec 'format_tests.sas' did not match any file(s) known to git. 

Sin embargo, si corro

 $ git checkout HEAD^ format_tests.sas 

directamente desde la command-line, funciona bien. También parece probar bien en otro repository git.

Siento que podría ser un problema de citas, pero no tengo idea en este punto.

La razón por la que no uso el método presentado a continuación es que si ejecuto el command sin un file, obtengo algo como lo siguiente, que NO está bien en nuestro entorno de novato (¿por qué usé un command de shell con el "-u"? cambiar en primer lugar):

 testgit.git/ (j=0,r=0)$ git back1 Warning: you are leaving 1 commit behind, not connected to any of your branches: a77dfed hlksdj; If you want to keep them by creating a new branch, this may be a good time to do so with: git branch new_branch_name a77dfed HEAD is now at 954f639... blakjsd 

Gracias por el interés y ayuda!

Su alias no necesita ejecutarse a través del shell, debería poder hacer esto:

 [alias] back=checkout HEAD^ -- 

Git agregará automáticamente los arguments del alias, lo que significa esto:

 $ git back afile bfile cfile 

se convertirá en esto:

 $ git checkout HEAD^ -- afile bfile cfile 

Bonificación: Tenga en count el uso del doble guión "-", esto indica que los demás arguments son todos los files, de lo contrario, puede interpretar erróneamente un file como una twig existente u otra reference.

Para abordar el requisito del póster de usar un alias de command de shell , la trampa es que la subshell tendrá su directory de trabajo establecido en el directory raíz del repository. Esto es lo git help config tiene que decir la git help config :

 alias.* [...] Note that shell commands will be executed from the top-level directory of a repository, which may not necessarily be the current directory. GIT_PREFIX is set as returned by running git rev-parse --show-prefix from the original current directory. 

La buena noticia es la variable GIT_PREFIX que puede usar en su command de la siguiente manera:

 back1=!sh -uc 'git checkout HEAD^ -- "$GIT_PREFIX/$1"' -