問題例
例として、main
ブランチでtopic
ブランチのコミットをfast-forwardでマージし、その後topic
ブランチを削除。その削除を取り消してtopic
ブランチを元に戻したいようなとき。
参考サイト:削除したブランチは復活できる!
準備~ブランチの削除まで
リポジトリー・mainブランチの作成
GitHubであらかじめ準備したbranch
リポジトリーをclone。
1 2 3 4 5 6 7 |
[vagrant@localhost git]$ git clone git@github.com:taustation/branch branch Cloning into 'branch'... Enter passphrase for key '/home/vagrant/.ssh/id_rsa': remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Receiving objects: 100% (3/3), done. |
ログ確認。
1 2 3 4 5 6 7 |
[vagrant@localhost git]$ cd branch [vagrant@localhost branch]$ git log commit ad931b08026b6a1ba68350176ae892bcb115a23e (HEAD -> main, origin/main, origin/HEAD) Author: taustation <88479749+taustation@users.noreply.github.com> Date: Sun Aug 8 22:40:29 2021 +0900 Initial commit |
topicブランチの作成・コミット
topic
ブランチを作成・移動して、ファイル作成・コミット。
1 2 3 4 5 6 7 8 9 10 11 |
[vagrant@localhost branch]$ git branch topic [vagrant@localhost branch]$ git checkout topic Switched to branch 'topic' [vagrant@localhost branch]$ vi sample.txt [vagrant@localhost branch]$ cat sample.txt topicブランチで新規作成 [vagrant@localhost branch]$ git add . [vagrant@localhost branch]$ git commit -m "topic-commit" [topic aa55da4] topic-commit 1 file changed, 1 insertion(+) create mode 100644 sample.txt |
topic
ブランチのログ確認。
1 2 3 4 5 6 7 8 9 10 11 12 |
[vagrant@localhost branch]$ git log commit aa55da433616e4555e17a23e385e47c446ac647d (HEAD -> topic) Author: taustation <taustation@gmail.com> Date: Wed Aug 11 15:52:50 2021 +0900 topic-commit commit ad931b08026b6a1ba68350176ae892bcb115a23e (origin/main, origin/HEAD, main) Author: taustation <88479749+taustation@users.noreply.github.com> Date: Sun Aug 8 22:40:29 2021 +0900 Initial commit |
topicブランチのマージ
main
ブランチに移動し、topic
ブランチをマージ。
1 2 3 4 5 6 7 8 9 |
[vagrant@localhost branch]$ git checkout main Switched to branch 'main' Your branch is up to date with 'origin/main'. [vagrant@localhost branch]$ git merge topic Updating ad931b0..aa55da4 Fast-forward sample.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 sample.txt |
マージ後のファイルとログを確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[vagrant@localhost branch]$ ls README.md sample.txt [vagrant@localhost branch]$ cat sample.txt topicブランチで新規作成 [vagrant@localhost branch]$ git log commit aa55da433616e4555e17a23e385e47c446ac647d (HEAD -> main, topic) Author: taustation <taustation@gmail.com> Date: Wed Aug 11 15:52:50 2021 +0900 topic-commit commit ad931b08026b6a1ba68350176ae892bcb115a23e (origin/main, origin/HEAD) Author: taustation <88479749+taustation@users.noreply.github.com> Date: Sun Aug 8 22:40:29 2021 +0900 Initial commit |
topicブランチの削除
topic
ブランチを削除。
1 2 |
[vagrant@localhost branch]$ git branch -d topic Deleted branch topic (was aa55da4). |
削除したブランチの復旧
ここで、削除してしまったtopicブランチを復旧したいとする。
git reflogでの確認
まずgit reflog
で履歴確認。topic
ブランチが最終的に確定した部分を探す。
1 2 3 4 5 6 |
[vagrant@localhost branch]$ git reflog aa55da4 (HEAD -> main) HEAD@{0}: merge topic: Fast-forward ad931b0 (origin/main, origin/HEAD) HEAD@{1}: checkout: moving from topic to main aa55da4 (HEAD -> main) HEAD@{2}: commit: topic-commit ad931b0 (origin/main, origin/HEAD) HEAD@{3}: checkout: moving from main to topic ad931b0 (origin/main, origin/HEAD) HEAD@{4}: clone: from git@github.com:taustation/branch |
今回の場合、topic-commit
のHEAD@{2}
がこれにあたる。
ログ番号を指定してブランチを復旧
以下のコマンドでブランチを復旧。
git branch ブランチ名 HEAD@{ログ番号}
1 |
[vagrant@localhost branch]$ git branch topic HEAD@{2} |
復旧確認
topic
ブランチが作成されたこと、そのログやファイルの内容が元に戻っていることを確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[vagrant@localhost branch]$ git branch * main topic [vagrant@localhost branch]$ git checkout topic Switched to branch 'topic' [vagrant@localhost branch]$ git log commit aa55da433616e4555e17a23e385e47c446ac647d (HEAD -> topic, main) Author: taustation <taustation@gmail.com> Date: Wed Aug 11 15:52:50 2021 +0900 topic-commit commit ad931b08026b6a1ba68350176ae892bcb115a23e (origin/main, origin/HEAD) Author: taustation <88479749+taustation@users.noreply.github.com> Date: Sun Aug 8 22:40:29 2021 +0900 Initial commit [vagrant@localhost branch]$ cat sample.txt topicブランチで新規作成 |