UPDATE²:Git 2.23(2019年8月)では、これを行う新しいコマンド
git restore
があります。承認された回答を参照してください。
次の使用例を想像してみてください。Git作業ツリーの特定のサブディレクトリにあるすべての変更を取り除き、他のすべてのサブディレクトリはそのまま残したいとします。
できます
git checkout .
がgit checkoutです。スパースチェックアウトによって除外されたディレクトリを追加しますがありますが
git reset --hard
、サブディレクトリに対しては実行できません。> git reset --hard . fatal: Cannot do hard reset with paths.
繰り返しますが、なぜgitはパスでハード/ソフトリセットを実行できないのですか?
を使用して現在の状態をリバースパッチすることはできます
git diff subdir | patch -p1 -R
が、これはかなり奇妙な方法です。
この操作に適切なGitコマンドは何ですか?
以下のスクリプトは問題を示しています。How to make files
コメントの下に適切なコマンドを挿入します。現在のコマンドはa/c/ac
、スパースチェックアウトによって除外されるはずのファイルを復元します。私がいることを注意していない明示的に復元したいa/a
とa/b
、私は「知っている」a
と、以下のすべてのものを復元したいです。編集:そして私はまたb
、「知っている」、または他のどのディレクトリがと同じレベルにあるかを知りませんa
。
#!/bin/sh
rm -rf repo; git init repo; cd repo
for f in a b; do
for g in a b c; do
mkdir -p $f/$g
touch $f/$g/$f$g
git add $f/$g
git commit -m "added $f/$g"
done
done
git config core.sparsecheckout true
echo a/a > .git/info/sparse-checkout
echo a/b >> .git/info/sparse-checkout
echo b/a >> .git/info/sparse-checkout
git read-tree -m -u HEAD
echo "After read-tree:"
find * -type f
rm a/a/aa
rm a/b/ab
echo >> b/a/ba
echo "After modifying:"
find * -type f
git status
# How to make files a/* reappear without changing b and without recreating a/c?
git checkout -- a
echo "After checkout:"
git status
find * -type f
git checkout -- /path/to/subdir/
ですか?
git stash
パス引数を受け付けません...
git stash && git stash drop
ですか?