Git リセットの説明: ソフト、ミックス、ハード
git reset はブランチを別のコミットに移動します。 3 つのモードの違いは、ファイルに対する処理のみです。それぞれが保持するもの、どれを使用するか、リセットしすぎた場合に元に戻す方法は次のとおりです。
作者 Kodmora
GitTree の背後にあるソフトウェア ハウス
- 元に戻すと回復
- コミット履歴
- コミット
このページでは
3 つのモードはすべて、現在のブランチを指定したコミットに移動します。 `--soft` はすべての変更をステージングした状態に保ち、`--mixed` (デフォルト) はステージングされていない状態で作業フォルダーに保持し、`--hard` はそれらを破棄します。 最後のコミットを元に戻して作業を維持するには、git reset --soft HEAD~1 を実行します。 --hard はコミットされていない変更を永久に削除するため、確実な場合にのみ使用してください。
ソフト、ミックス、ハードの違いは何ですか?
| モード | ブランチの移転 | ステージングエリア | 作業フォルダー | それを使用して、 |
|---|---|---|---|---|
--soft | はい | 保たれた | 保たれた | コミットをやり直す: すべてがステージングされたままになります |
--mixed | はい | リセット | 保たれた | ステージを解除してコミットするものを再選択する |
--hard | はい | リセット | リセット | 仕事を捨てる |
Git は、作業内容の 3 つのコピー (コミット履歴、ステージング領域、作業フォルダー) を保持します。リセットは常に最初に移動します。モードは、他の 2 つも書き換えるかどうかを決定します。
git replace --soft をいつ使用する必要がありますか?
これを使用すると、すべての変更をステージングした状態でコミットを取り消し、再度コミットできるようになります。これは、ブランチを 1 つのコミットに圧縮する最も簡単な方法です。
# undo the last commit, keep the changes staged
git reset --soft HEAD~1
# squash everything since main into one commit
git reset --soft main
git commit -m "feat(search): quick open"git replace --mixed をいつ使用する必要がありますか?
これはデフォルトであるため、git reset は git reset --mixed を意味します。これを使用して、コミットを取り消して作業を別の方法で分割したり、ファイルのステージングを解除したりできます。
# undo the last two commits, keep the changes unstaged
git reset HEAD~2
# unstage one file (the branch does not move)
git reset src/search.tsアンステージングの場合、git restore --staged src/search.ts は同じ仕事を行い、より明確に読み取ります。
git replace --hard をいつ使用する必要がありますか?
# drop the last commit and its changes
git reset --hard HEAD~1
# match the remote exactly
git fetch origin
git reset --hard origin/mainブランチからコミットを削除するにはどうすればよいですか?
| 状況 | 指示 |
|---|---|
| 最後のコミット、プッシュされていません | git reset --hard HEAD~1 |
| プッシュされていない古いコミット | git rebase -i <sha>~1、次に drop をマークします |
| コミットはすでにプッシュされています | git revert <sha> |
| コミットが間違ったブランチに移動しました | git cherry-pick してから、古いブランチをリセットします |
git revert は履歴をそのまま保持するため、共有ブランチではこれが唯一の安全な選択肢です。プッシュされたブランチをリセットするには強制プッシュが必要であり、チームメイトのクローンが壊れます。 Interactive rebase と cherry-pick には独自のガイドがあります。
git リセットを元に戻すにはどうすればよいですか?
リセットによりブランチが移動され、reflog はブランチがどこにあったかを記憶します。
git reflog
# 3e52f10 HEAD@{0}: reset: moving to HEAD~2
# 9b3c7d1 HEAD@{1}: commit: add search box
git reset --hard 9b3c7d1これにより、--hard 以降を含むコミットが戻されます。ステージングされたもののコミットされていないファイルが、git fsck --lost-found で見つかることがあります。ステージングされなかった変更は失われます。 リセット、リベース、またはコミットを元に戻す はあらゆるケースをカバーします。
リセット、元に戻す、復元の違いは何ですか?
| 指示 | 何をするのか | 歴史を書き換える? |
|---|---|---|
git reset | ブランチを別のコミットに移動します | はい |
git revert | 別のコミットを元に戻すコミットを追加します | いいえ |
git restore | ファイルを変更しますが、ブランチは変更しません | いいえ |
GitTreeのブランチをリセットする方法
コミットを選択してください
ブランチが戻るコミットを右クリックし、Reset … to This Commit を開きます。
モードを選択してください
ソフト: すべての変更をステージングした状態に保つ、混合: 変更を作業フォルダーに保持する、または ハード: すべての変更を破棄... を選択します。
必要に応じて元に戻す
GitTree は最初に作業内容を
refs/ogt/trashに保存するため、ハード リセット後でも 元に戻す で元に戻すことができます。

詳細についてはブランチをコミットにリセットを参照し、安全なリポジトリで練習するにはリセットモードのレッスンを参照してください。
よくある質問
HEAD~1 とはどういう意味ですか?
現在のコミットの 1 つ前のコミット。 HEAD~3 は 3 歩後退しています。 git log --oneline は、コミットに直接名前を付けたい場合にハッシュを表示します。
git replace はコミットを削除しますか?
ブランチをそれらから遠ざけるので、それらは git log に表示されなくなります。これらはデフォルトで少なくとも 30 日間 reflog に残り、その後 Git で削除できます。
最後のコミットを取り消して変更を維持するにはどうすればよいですか?
ステージングされたままにする場合は git reset --soft HEAD~1 を実行し、ステージングを解除したままにする場合は git reset HEAD~1 を実行します。
git restart --hard は安全ですか?
コミットされた作業には安全であり、reflog によって持ち帰ることができます。コミットされていない作業は削除されるため、安全ではありません。よくわからない場合は、最初にスタッシュするかコミットしてください。
すでにプッシュされているブランチをリセットできますか?
全員のブランチを書き換える強制プッシュの場合のみ。共有ブランチでは、代わりに git revert を使用してください。
情報源
他の製品に関する申し立ては、2026年11月7日 の公式ページと照合して確認されました。価格と機能は変更されます。ベンダーのページが真実の情報源です。
