En mis files duales tengo la siguiente function que funciona:
function undelete { git checkout $(git rev-list -n 1 HEAD -- "$1")^ -- "$1" }
… que uso así:
$ undelete /path/to/deleted/file.txt
Me gustaría ver el scope de este command ya que es un command git.
$ git undelete /path/to/deleted/file.txt
Aquí hay dos de mis bashs que no funcionan:
git config --global alias.undelete "!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f" git config --global alias.undelete "!sh -c 'git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1' -"
Es posible hacer esto con alias (ver el comentario de jthill ):
git config --global alias.undelete '!f() { git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1; }; f' git config --global alias.undelete '!sh -c "git checkout $(git rev-list -n 1 HEAD -- $1)^ -- $1" -'
Recomiendo escribir algo complicado como un script de shell:
#! /bin/sh # # git-undelete: find path in recent history and extract . git-sh-setup # see $(git --exec-path)/git-sh-setup ... more stuff here if/as appropriate ... for path do rev=$(git rev-list -n 1 HEAD -- "$path") || exit 1 git checkout ${rev}^ -- "$path" || exit 1 done
(el bucle for
tiene como objective permitir que múltiples nombres de ruta de acceso "recuperen").
Nombra el script git-undelete
, ponlo en tu $PATH
(pongo scripts en $HOME/scripts
), y cada vez que ejecutas git undelete
, Git encontrará tu script git-undelete
y lo ejecutará (con $PATH
modificado para tener git --exec-path
desde el git --exec-path
, para que funcione . git-sh-setup
).