Gitで問題が起きたら、むやみにコマンドを実行しないでください。
状態が分からないまま git reset --hard や git push --force を実行することが、
Gitで作業を失う最大の原因です。まず「今どうなっているか」を確認します。
git status # 1. 今どのBranch? 未Commitの変更は?
git branch # 2. Branchの一覧と現在地
git log --oneline --graph --all # 3. 履歴と分岐の形
git diff # 4. 変更の中身
git remote -v # 5. Remoteの設定
git fetch # 6. Remoteの最新情報を取得(手元は変えない)1. 今どのBranchにいる?
↓
2. 未Commitの変更はある?
↓
3. Stagingされている?
↓
4. 最近どのCommitをした?
↓
5. LocalとRemoteの状態は?
↓
6. 何をしようとして問題が起きた?
ここまで確認できていれば、質問するときも状況を正確に伝えられます。
Issueで質問するときは git status と git log --oneline --graph --all の出力を貼ってください。
まだCommitしていないなら、switch するだけで変更は付いてきます。
git status # 変更内容を確認
git switch -c feature/correct-branch移動できないと言われたら git stash で退避してから移動し、git stash pop で戻します。
git restore --staged <file>git commit --amend -m "正しいメッセージ"Push済みのCommitには使わないでください。 履歴が書き換わります。
異常ではありません。実習6 の手順で解消してください。
git status # どのファイルがConflictしているか確認git merge --abortMerge開始前の状態に戻ります。
git reflogreflog はHEADが移動した履歴です。reset --hard の直後でも、ここから戻せることがあります。
慌てて追加の操作をする前に、まず reflog を見てください。
以下は強力ですが、誤ると変更や履歴を失います。
git reset --hardWorking Treeの変更まで消えます。Commitしていない作業は基本的に戻せません。
git branch -D <branch>未MergeのBranchでも強制削除します。まず -d を使ってください。
git push --forceRemoteの履歴を書き換えます。他人の作業を消す可能性があります。
共有Branch、特に
mainでは原則使用しないでください。 どうしても必要な場合は--force-with-leaseを使い、事前にチームへ共有します。
追跡されていないファイルを削除します。.gitignore されたファイルは残りますが、
新規作成してまだ add していないファイルは消えます。まず -n(確認のみ)で試してください。
git clean -nd # 何が消えるか表示するだけrm fileこれはファイルそのものを削除します。Commit済みならGitで戻せますが、未Commitなら戻せません。
「Gitが必ず何でも復元してくれる」とは考えないでください。 Gitが守ってくれるのは、Commitした内容だけです。
分からない → git status
履歴が知りたい → git log --oneline --graph --all
やらかした → git reflog
Merge をやめたい → git merge --abort