サーチ…
備考
ステージングは 'ファイル'自体とはあまり関係がなく、それぞれのファイル内の変更に関連することはほとんどありません。変更を含むファイルをステージングし、gitは変更をコミットとして追跡します(コミットの変更が複数のファイルにわたって行われた場合でも)。
ファイルとコミットの区別は軽微なように見えるかもしれませんが、この違いを理解することは、cherry-pickやdiffのような重要な機能を理解する上で不可欠です。 ( チェリーピックをファイル管理ツールとして提案した、受け入れられた回答の複雑さに関するコメントの不満を参照してください)。
概念を説明するのに良い場所は何ですか?それは発言にありますか?
主なコンセプト:
ファイルは、情報技術におけるこの2つのより一般的なメタファーです。ベストプラクティスでは、内容が変更されたときにファイル名が変更されないように指示されています(例外はありません)。
コミットは、ソースコード管理に固有のメタファーです。コミットは、バグ修正のような特定の作業に関連する変更です。コミットには複数のファイルが含まれることがよくあります。単一のマイナーなバグ修正では、テンプレートとCSSを一意のファイルに変更する必要があります。変更が記述され、開発され、文書化され、レビューされ、配備されると、別々のファイルの変更に注釈を付けて、単一の単位として扱うことができます。この場合の単一ユニットはコミットです。同様に重要なのは、レビュー中のコミットだけに焦点を当てることで、影響を受けるさまざまなファイルのコード行を変更せずに安全に無視できることです。
単一のファイルをステージングする
コミットするファイルをステージングするには、次のコマンドを実行します。
git add <filename>
ファイルに対するすべての変更のステージング
git add -A
git add .
バージョン2.xでは、 git add .
現在のディレクトリとそのすべてのサブディレクトリにあるファイルに対するすべての変更がステージングされます。しかし、1.xでは、削除されたファイルではなく、新しいファイルや変更されたファイルだけがステージングされます 。
git add -A
任意のバージョンのファイルに対するすべての変更をステージングgit add --all
、 git add -A
またはそれに相当するコマンドgit add --all
を使用します。
削除したファイルをステージングする
git rm filename
ファイルをgitからディスクから削除せずに削除するには、-- --cached
フラグを使用します
git rm --cached filename
変更が含まれているファイルのステージを解除する
git reset <filePath>
インタラクティブな追加
git add -i
(または--interactive
)はインタラクティブなインタフェースを提供し、インデックスを編集して、次のコミットに備えたいものを準備することができます。ファイル全体の変更を追加および削除し、追跡されないファイルを追加したり、ファイルを削除したりすることができます。また、インデックスに追加する変更のサブセクションを選択したり、追加する変更のチャンクを選択したり、それらのチャンクを分割したり、 。 Git用の多くのグラフィカルコミットツール( git gui
など)にはこのような機能が含まれています。これはコマンドラインバージョンよりも使いやすいかもしれません。
インタラクティブなrebaseの途中で分割しようとしている場合(1)、別々のコミットに入れたい作業ディレクトリの変更を絡ませた場合、大きなコミット。
$ git add -i
staged unstaged path
1: unchanged +4/-4 index.js
2: +1/-0 nothing package.json
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now>
この出力の上半分は、インデックスの現在の状態をステージングされた列とステージングされていない列に分割して示しています。
-
index.js
には4行が追加され、4行は削除されています。現在のステータスが「変更されていない」と報告されているため、現在はステージングされていません。このファイルがステージングされると、+4/-4
ビットがステージングされた列に転送され、ステージングされていない列には「何もありません」と表示されます。 -
package.json
には1行が追加され、ステージングされています。ステージングされていない列の下の「何もない」行で示されるようにステージングされているので、これ以上の変更はありません。
下半分はあなたができることを示しています。数字(1-8)または文字( s
、 u
、 r
、 a
、 p
、 d
、 q
、 h
)を入力します。
status
は、上の出力の上部と同じ出力が表示されます。
update
使用すると、追加の構文を使用してステージングされたコミットをさらに変更できます。
revert
は段階的なコミット情報をHEADに戻します。
add untracked
を追加すると、以前はバージョンコントロールによって追跡されなかったファイルパスを追加することができます。
patch
は、さらなる分析のためのstatus
と同様に、出力から1つのパスを選択することを可能にする。
diff
はコミットするものを表示します。
quit
コマンドquit
終了します。
help
、このコマンドを使用しての更なる支援を提供します。
ハンクによる変更を加える
パッチフラグを使用してコミットのためにステージングされる作業の「ハンクス」を知ることができます。
git add -p
または
git add --patch
これにより、diffを見ることができるインタラクティブなプロンプトが開き、それを含めるかどうかを決めることができます。
Stage this hunk [y,n,q,a,d,/,s,e,?]?
- yの段階次回のために、この塊は、コミット
- n次のコミットにこのハンクをステージングしない
- q終了する。この塊を残したり、残った狩猟をしたりしないでください
- 段階この塊とファイル内のすべての後にハンク
- dこのファイルを後で処理しないでください
- g行きたい服を選んでください
- /与えられた正規表現にマッチする塊を検索する
- jはこの塊を未定にしておき、次の未確定塊を見てください
- Jはこの塊を未定にしておき、次の塊を見てください
- kこの塊を未定にしておく、前の未確定塊を参照
- Kはこの塊を未定にしておきます、前の塊を見てください
- sが小さい兄貴に現在の塊を分割しました
- 電子手動で現在の塊を編集
- ?印刷幹ヘルプ
これにより、コミットしたくない変更を簡単にキャッチできます。
git add --interactive
とp
を選択することでこれを開くこともできます。
段階的な変更を表示
コミットのためにステージングされたハンズクを表示するには:
git diff --cached