[解決済み] 「git rm --cached x" vs "git reset head -- x"?
質問
git rm
からエントリを削除します。 ステージング・エリア これは からgit reset HEAD
のように、quot;unstages" のファイルです。ステージを解除することで ステージング・エリアを元の状態に戻す を、修正する前の状態です。git rm
一方 は、ファイルをステージから完全に削除するため に含まれないようにする。 コミットスナップショット、それによって効果的に を削除します。デフォルトでは
git rm file
は、ステージング・エリアからファイルを完全に削除し、ディスク> (作業ディレクトリ)からも削除します。作業ディレクトリにファイルを残すにはgit rm --cached
.
しかし、具体的にどのような違いがあるかというと
git rm --cached asd
と
git reset head -- asd
?
解決方法は?
例えば、あるファイルがある場所は、(コミットされた)ツリー、インデックス、作業コピーの3つです。ファイルをフォルダに追加するだけでは、作業コピーに追加していることになります。
のようにした場合
git add file
を使用すると、それをインデックスに追加します。そして、それをコミットすると、ツリーにも追加されます。
の3つの一般的なフラグを知っておくと、きっと役に立ちます。
git reset
:
git reset [--]です。
<mode>
] [
<commit>
]
このフォームは、現在のブランチヘッドを
<commit>
そして場合によっては
のツリーにリセットする)。
<commit>
と
に依存する作業ツリー
<mode>
のいずれかでなければならない。
のようなものです。
--ソフト
インデックスファイルや作業ツリーには全く触れません。
になります。
<commit>
他のモードと同じように)。この場合、すべての
変更されたファイルは、git status にあるように "コミットされる変更" となります。
--ミックス
インデックスをリセットするが、作業ツリーはリセットしない(つまり、変更されたファイル は保存されますが、コミットのマークは付きません)、未対応のものを報告します。 更新されます。これはデフォルトの動作です。
--hard
インデックスと作業ツリーをリセットします。インデックスと作業木をリセットします。
からの作業ツリー
<commit>
は破棄されます。
さて、次のようなことをすると
git reset HEAD
実際にやっていることは
git reset HEAD --mixed
を実行すると、インデックスをリセットして、 ファイルを追加したりインデックスに変更を加えたりする前の状態にします (via.
git add
). この場合、作業コピーの状態がどうであれ、あなたはそれを少しも変更していませんが、ツリーのHEADと同期するようにインデックスを変更したのです。
かどうか
git add
は、以前にコミットしたが変更されたファイルをステージングするため、または新しい (以前は追跡されていなかった) ファイルを追加するために使用されました。
git reset HEAD
とは正反対です。
git add
.
git rm
一方、Commit を実行すると、作業ディレクトリとインデックスからファイルが削除され、ツリーからもファイルが削除されます。
git rm --cached
しかし、インデックスだけからファイルを削除し、作業コピーには残します。この場合
は、そのファイルが以前にコミットされていた場合。
にしたのであれば、インデックスを
異なる
ツリーの HEAD と作業コピーから、HEAD には前にコミットしたバージョンのファイルがあり、インデックスには
いいえ
ファイルには全く存在せず、作業コピーにはその最終更新があります。今コミットすると、インデックスとツリーが同期され、ファイルはツリーから削除されます (作業コピーには追跡されないままです)。
いつ
git add
は、新しい(それまで追跡されていなかった)ファイルを追加するために使用された場合
git rm --cached
とは正反対です。
git add
(とほぼ同じです)。
git reset HEAD
).
Git 2.25 では、このようなケースに対応する新しいコマンドを導入しました。
git restore
しかし Git 2.28 では、動作が変わる可能性があるという意味で、man ページで "experimental" と説明されています。
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルリポジトリのブランチをリセットして、リモートリポジトリのHEADと同じにする
-
[解決済み】ローカルの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 <hash> not allowed due to a merge but no -m option was given.
-
[解決済み】マージ後のコミットでGitエラー - fatal: マージ中に部分コミットができない
-
[解決済み】Git サブモジュール head 'reference is not a tree' エラー
-
[解決済み] [email protected] へのいくつかの参考文献のプッシュに失敗しました。
-
[解決済み] リモートの <ブランチ名> とマージするように設定されていますが、そのような参照は取得されませんでしたか?
-
[解決済み] 短いGitバージョンのハッシュを取得する
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] GitのFETCH_HEADとはどういう意味ですか?
-
[解決済み] Gitのエラー「object file ... is empty」はどうすれば直せますか?
-
[解決済み] Gitのプッシュエラーです。Unable to unlink old (Permission denied)です。