私はあまりにも頻繁にマウスを使って次のようなことをします:
/home/me-$ git log --name-status -1
commit a10e63af1f4b1b2c28055fed55d4f2bb3225a541
Author: Me <[email protected]>
Date: Tue Aug 18 13:04:04 2015 -0400
XYZ-376 make ctors public
M x/y/z/Class1.java
M x/y/z/Class2.java
/home/me-$ git checkout -- x/y/z/Class2.java # <-- copy/paste with the mouse
一部のgitコマンドはワイルドカードを受け入れることを知っており、これによりこの問題がいくらか軽減されますが、以前のコマンドからパススペックなどを具体的に参照する方法があるかどうか疑問に思っています。
マウスを使用せずに、また長いパスを手動で再入力せずに、このようなコマンドを実行するにはどうすればよいですか?
私は通常$(<command in subshell here...>)
、これにサブシェル()を使用します。
たとえば、多くのファイルを削除して、git rm
すべてのファイルを削除しなければならないことがありました。
git ls-files --deleted
欠落しているすべてのファイルの名前を返すコマンドがあります。私はそれを次のgit rm
ように組み合わせることができます:
git rm $(git ls-files --deleted)
これはやや悪い例です。なぜなら(後で発見したように)、この操作はgit add --all
。を使用するとはるかに簡単に実行できるからです。しかし、それはその要点を示していると思います。
あなたの場合、前のコミットで変更されたすべてのファイルをチェックアウトしたい場合、git log --name-status
追加情報が含まれているため、の出力を解析するのは難しいでしょうが、git diff HEAD^ --name-only
代わりに次のようなものを使用できます。
そう:
git checkout $(git diff HEAD^ --name-only)
あなたの例でそれを行います。
$(...)
構文を使用して気付いた素晴らしい点の1つは、BashとPowerShellの両方で機能することです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加