Forneça o mesmo nome de arquivo como argumento para dois comandos [duplicado]

2

Em um conflito de git, posso fazer atualmente:

git diff path/to/some/file.txt

... depois de rever o diff, normalmente eu quero fazer:

git checkout --theirs path/to/some/file.txt && git add path/to/some/file.txt

É trabalhoso editar os dois caminhos de cada vez, por isso gostaria de poder fazer o seguinte:

git checkout --theirs <ref> && git add path/to/some/file.txt

Onde o <ref> refere-se ao arquivo.txt.

Qualquer maneira de fazer isso no bash?

    
por EoghanM 11.02.2015 / 13:54

1 resposta

3

Existem muitas maneiras.

Você pode usar expansão do histórico em (t) csh, bash ou zsh. !$ se expande para o último argumento da linha de comando anterior.

git checkout --theirs !$ && git add !$

Bash, ksh e zsh têm uma variável $_ que armazena o último argumento do último comando simples executado pelo shell.

git checkout --theirs "$_" && git add "$_"

Bash e zsh têm um atalho de teclado Alt + . ou ESC . que insere o último argumento de a linha de comando anterior.

git checkout --theirs Alt+. && git add Alt+.

Você pode colocar isso em uma função.

git_add_theirs () {
  if [ "$#" -eq 0 ]; then set -- "$_"; fi
  git checkout --theirs -- "$@" && git add -- "$@"
}

Ou crie um script autônomo e defina um alias add-theirs = git_add_theirs no seu ~/.gitconfig .

    
por 11.02.2015 / 23:51

Tags