gitで更新内容がなくなった場合の対処法の1つ
gitを理解せずに使っていると、いろいろなコマンドを実行しているうちに、以前更新した内容がなくなってしまうことがあると思います。
僕は、2つのcommitを1つにまとめようと思い、"git rebase"を実行したところ、2つ目のcommitの更新内容を失ってしまいました。
ここで紹介するのはその時の対処方法です。
まず、"git reflog"を実行すると、過去の操作履歴がすべて表示されます。
※一部省略
Kazuya-no-MacBook-Air:depot kazuyaokamoto$ git reflog d59f3a2 HEAD@{8}: reset: moving to HEAD^ 8d996ed HEAD@{9}: rebase -i (finish): returning to refs/heads/master 8d996ed HEAD@{10}: checkout: moving from master to 8d996ed 3414547 HEAD@{11}: rebase -i (finish): returning to refs/heads/master 3414547 HEAD@{12}: checkout: moving from master to 3414547 3414547 HEAD@{13}: commit: C2 8d996ed HEAD@{14}: rebase -i (finish): returning to refs/heads/master 8d996ed HEAD@{15}: checkout: moving from master to 8d996ed 1b5b527 HEAD@{16}: rebase -i (finish): returning to refs/heads/master 1b5b527 HEAD@{17}: checkout: moving from master to 1b5b527 1b5b527 HEAD@{18}: commit: Task C 2 8d996ed HEAD@{19}: commit: Task C free exam d59f3a2 HEAD@{20}: commit: Task B free exem 75e2346 HEAD@{21}: commit: Validation! 16235d4 HEAD@{22}: commit (initial): Depot Scaffold
次に戻したい状態を確認し、"git reset --hard HEAD@{18}"を実行します。
※今回はHEAD@{18}に戻します。
Kazuya-no-MacBook-Air:depot kazuyaokamoto$ git reset --hard HEAD@{18} HEAD is now at 1b5b527 Task C 2
すると、"1b5b527 HEAD@{18}: commit: Task C 2"の状態に戻ります。
確認のため、"git status"を実行します。
Kazuya-no-MacBook-Air:depot kazuyaokamoto$ git status # Not currently on any branch. nothing to commit (working directory clean)
正常な場合と違い"# Not currently on any branch."と表示されてしまいました。
正常な場合は"# On branch master"と表示されます。
ブランチを確認します。
Kazuya-no-MacBook-Air:depot kazuyaokamoto$ git branch * (no branch) master
"master"ブランチにいないようなので、"master"にcheckoutします。
Kazuya-no-MacBook-Air:depot kazuyaokamoto$ git checkout master Switched to branch 'master'
僕の場合はこれで対処できました。
Kazuya-no-MacBook-Air:depot kazuyaokamoto$ git status # On branch master nothing to commit (working directory clean)