为两个命令提供相同的文件名作为参数

Eog*_*anM 3 shell bash

在 git 冲突中,我目前可以执行以下操作:

git diff path/to/some/file.txt
Run Code Online (Sandbox Code Playgroud)

...查看差异后,通常我想做:

git checkout --theirs path/to/some/file.txt && git add path/to/some/file.txt
Run Code Online (Sandbox Code Playgroud)

每次编辑两条路径都很费力,所以我希望能够做到以下几点:

git checkout --theirs <ref> && git add path/to/some/file.txt
Run Code Online (Sandbox Code Playgroud)

其中<ref>指的是 file.txt。

有什么办法可以在 bash 中做到这一点?

Gil*_*il' 5

有很多方法。

您可以在 (t)csh、bash 或 zsh 中使用历史扩展!$扩展到上一个命令行的最后一个参数。

git checkout --theirs !$ && git add !$
Run Code Online (Sandbox Code Playgroud)

Bash、ksh 和 zsh 有一个变量$_,用于存储 shell 执行的最后一个简单命令的最后一个参数。

git checkout --theirs "$_" && git add "$_"
Run Code Online (Sandbox Code Playgroud)

Bash 和 zsh 有一个键盘快捷键Alt+.ESC .插入前一个命令行的最后一个参数。

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

你可以把它塞进一个函数中。

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

或者使它成为一个独立的脚本并add-theirs = git_add_theirs在你的~/.gitconfig.