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)