[解決済み] [Solved] サブディレクトリをgit reset --hardする方法は?
質問
<ブロッククオート
UPDATE² (アップデイト
: Git 2.23(2019年8月)では、新しいコマンドである
git restore
を参照してください。
受付回答
.
アップデイト : Git 1.8.3 からはより直感的に動作するようになりました。 私なりの答え .
次のようなユースケースを想像してください。Git の作業ツリーの特定のサブディレクトリの変更をすべて削除し、他のサブディレクトリはそのまま残しておきたい。
-
私ができることは
git checkout .
しかし git checkout ... スパースチェックアウトで除外されたディレクトリを追加します。 -
があります。
git reset --hard
しかし、サブディレクトリに対してそれをさせることはできません。> git reset --hard . fatal: Cannot do hard reset with paths.
-
を使って現在の状態を逆パッチすることができるんだ。
git diff subdir | patch -p1 -R
しかし、これはかなり奇妙な方法です。
この操作のための適切なGitコマンドは何ですか?
以下のスクリプトは、問題を説明するものです。の下に適切なコマンドを挿入してください。
How to make files
のコメント -- 現在のコマンドはファイルを復元します
a/c/ac
スパースチェックアウトで除外されるはずのもの。なお、私は
しない
を明示的にリストアしたい。
a/a
と
a/b
というのも、私はquot;know"しか知らないからです。
a
で、以下をすべて復元したい。
EDIT
: あと、"know"もわからない。
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 2.23 (2019年8月) で、あなたは
新コマンド
git restore
(また
ここで紹介した
)
git restore --source=HEAD --staged --worktree -- aDirectory
# or, shorter
git restore -s@ -SW -- aDirectory
この場合、インデックスと作業ツリーの両方が、次のように置き換えられます。
HEAD
のようなコンテンツがあります。
reset --hard
のように、特定のパスに対してのみ適用されます。
オリジナルの回答(2013年)
ノート(として コメント によって ダン・ファブリッチ )のことを指しています。
-
git checkout -- <path>
はハードリセットを行いません。作業ツリーのコンテンツをステージングされたコンテンツに置き換えます。 -
git checkout HEAD -- <path>
は、パスのハードリセットを行い、インデックスと作業ツリーの両方をHEAD
コミットします。
として
回答済み
によって
Ajedi32
両方のチェックアウトフォーム
ターゲットリビジョンで削除されたファイルを削除しない
.
作業ツリーに HEAD には存在しない余分なファイルがある場合は
git checkout HEAD -- <path>
はそれらを削除しません。
注
git checkout --overlay HEAD -- <path>
(Git 2.22、2019年第1四半期)
には表示されないが、インデックスと作業ツリーには表示されるファイル。
<tree-ish>
と一致させるために、削除されます。
<tree-ish>
を正確に表示します。
しかし、そのチェックアウトは
git update-index --skip-worktree
(無視したいディレクトリのために) "で述べたとおりです。
git sparse チェックアウトで除外されたファイルが何度も現れるのはなぜですか?
"。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git でブランチからコミットを削除する
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
git revert + git rebase 一度に複数のコミット_本然233的博客程式员息信网_git revert Multiple
-
[解決済み】Git Push Error: リポジトリデータベースにオブジェクトを追加する権限が不足しています。
-
[解決済み] git stashを元に戻す
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] GitのFETCH_HEADとはどういう意味ですか?
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています
-
[解決済み] git restore` コマンドとは何ですか?また、`git restore` と `git reset` の違いは何ですか?
-
[解決済み] git: 新規ファイルを含むすべての作業ディレクトリの変更を元に戻す
-
[解決済み】gitレポと作業コピーでLF eolを強制する
-
[解決済み] なぜgitはパスによるハード/ソフトリセットを行えないのですか?