今回やること
この記事では、Gitで間違えた変更を安全に戻す練習をします。
取り消し操作の前には、必ず git status と git diff で何を戻すのか確認します。
前提条件
- 学習用のGitリポジトリがある
- 重要な変更が残っていない
git statusとgit diffが使える
Step 1: 未コミット変更を作る
echo "wrong text" >> README.md
状態を確認します。
git status
git diff
Step 2: 未コミット変更を戻す
README.md の変更を戻します。
git restore README.md
戻ったか確認します。
git status
Step 3: ステージ済み変更を作る
echo "staged text" >> README.md
git add README.md
git status
この状態では、変更がステージに載っています。
Step 4: ステージから外す
git restore --staged README.md
これは変更自体を消すのではなく、ステージから外します。
git status
Step 5: 変更自体も戻す
git restore README.md
これで作業ツリーの変更も戻ります。
Step 6: 直前のcommitを打ち消す
共有済みのcommitを取り消す練習では、revert を使います。
git log --oneline
対象のcommit hashを確認して、次を実行します。
git revert <commit-hash>
revert は、対象commitを打ち消す新しいcommitを作ります。
push済みのcommitを取り消すなら、履歴を書き換えないrevertが安全です。
Step 7: 危険操作を知る
次のコマンドは、作業中の変更を消す可能性があります。
git reset --hard
学習中でも、意味を理解するまでは安易に使わないようにします。
よくあるエラー
| 状況 | よくある原因 | 確認すること |
|---|---|---|
| 変更が消えた | restore や reset --hard を使った | 実行前にdiffを見る |
| ステージから外しただけだった | --staged は変更を消さない | git status を確認 |
| revertでコンフリクトした | 後続変更と衝突 | コンフリクトを解決する |
| push済み履歴を書き換えた | resetしてforce pushした | 共有履歴ではrevertを検討 |
まとめ
未コミットの変更は git restore、ステージ済み変更を外すには git restore --staged、共有済みcommitを取り消すには git revert を使います。取り消し操作の前には、git status と git diff で対象を確認します。