[解決済み] git reset --mixed, --soft, --hard の違いは何ですか?
質問
コミットを分割したいのですが、どのリセットオプションを使用すればよいのかわかりません。
ページを見ていたら わかりやすく言うと、"git reset"は何をするのですか? しかし、私は git index や staging area が何であるかをよく理解していないため、説明を読んでも何の役にも立たないことに気がつきました。
また、使用例として
--mixed
と
--soft
は、その回答(fix and recommitしたい時)と同じに見えるのですが。どなたかもっと噛み砕いて説明していただけませんか? 私は
--mixed
が選択肢に入るのでしょうが、私が知りたいのは
なぜ
. 最後に
--hard
?
どなたか、3つの選択肢を選択する際のワークフロー例を教えてください。
どのように解決するのですか?
リポジトリ内のファイルを変更した場合、その変更は最初、ステージングされていない状態です。コミットするためには、ステージングする必要があります。
git add
. コミットするとき、コミットされるのはインデックスに追加された変更点です。
git reset
は、最低限、現在のブランチ(
HEAD
を指している。との差は
--mixed
と
--soft
は、インデックスも変更されるかどうかです。ですから、もし私たちがブランチ
master
この一連のコミットで
- A - B - C (master)
HEAD
を指します。
C
とインデックスが一致する
C
.
を実行すると
git reset --soft B
,
master
(というように
HEAD
を指すようになりました。
B
からの変更点がインデックスに残っています。
C
;
git status
は、ステージングされたものとして表示されます。ですから、もし
git commit
と同じ変更を含む新しいコミットを取得します。
C
.
では、もう一度ここからスタートです。
- A - B - C (master)
では、次のようにしましょう。
git reset --mixed B
. (注
--mixed
はデフォルトのオプションです)。もう一度
master
と
HEAD
はBを指しますが、今回はインデックスも変更して
B
. もし
git commit
にマッチするので、この時点では何も起こりません。
HEAD
. 作業ディレクトリにはまだ変更が残っていますが、インデックスにはないため
git status
は未ステージであることを示しています。コミットするには、次のようにします。
git add
を作成し、通常通りコミットしてください。
そして最後に
--hard
と同じです。
--mixed
(を変更します)。
HEAD
とインデックス)を除いて
--hard
は作業ディレクトリも変更します。もし私たちが
C
を実行し
git reset --hard B
で追加された変更は
C
とコミットされていない変更が削除され、作業コピーのファイルがコミット
B
. この方法では変更を永久に失う可能性があるため、常に
git status
ハードリセットを行う前に、作業ディレクトリがクリーンであること、あるいはコミットされていない変更を失っても問題ないことを確認してください。
そして最後に、ビジュアル化です。
関連
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] git add -A」と「git add .」の違い。
-
[解決済み] Gitブランチをmasterにマージする最も良い(そして最も安全な)方法は何ですか?
-
[解決済み] .gitignoreと.gitkeepの違いは何ですか?
-
[解決済み] detached HEADとmaster/originの連携はどうすればいいですか?
-
[解決済み] git reset --hard HEAD~1 を元に戻すにはどうしたらいいですか?
-
[解決済み] git stash popとgit stash applyの違いについて
-
[解決済み] git merge` で `--no-ff` フラグはどのような効果がありますか?
-
[解決済み] GitのHEAD^とHEAD~の違いは何ですか?
-
[解決済み】Gitで複数のコミットの著者名やコミッター名、Eメールを変更する方法は?
最新
-
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マージができない
-
gitコミット発生 ! [リモート拒否] master -> master (pre-receive hook declined) 解決策
-
[解決済み] .gitignore と "以下の追跡されていない作業ツリーファイルはチェックアウトによって上書きされるでしょう"
-
[解決済み] git initを2回実行すると、リポジトリが初期化されますか?それとも既存のリポジトリを再初期化しますか?
-
[解決済み] fatal: bad revision "とはどういう意味ですか?
-
[解決済み] リモートブランチにプッシュできない、ブランチに解決できない
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] GitのHEADとは何ですか?
-
[解決済み] ローカルの git コミットをキャンセルする方法は?