LoginSignup
2
0

More than 5 years have passed since last update.

git log関係コマンド

Posted at

git reflogで履歴などを確認できる

https://gist.github.com/kymmt90/9c997726b638b316f9be07aa4e3eea5e
reflog とは
reflog(参照ログ)とは HEAD やブランチ先端の動きの履歴
各個人のローカルリポジトリに存在
ブランチの切り替え、新たに加えられた変更のプル、履歴の書き換え、あるいは単なる新規コミットの実行などを記録
git reflog で HEAD の移動履歴を、git reflog <ブランチ名> でそのブランチ先端が指していたコミットの一覧を確認可能
HEAD@{5}: HEAD の五つ前の状態を示す
$ git reflog
2079bc8 HEAD@{0}: clone: from ssh://ebauser@ik1-311-15561.vs.sakura.ne.jp:/var/www/html/ebacorp.xyz/eba-groupwork_ushijima

git log -g で git log 風の出力で reflog が見られる

Reflog: HEAD@{0} (ushijima ushijima@DESKTOP-VK55IR1.localdomain)
Reflog message: clone: from ssh://ebauser@ik1-311-15561.vs.sakura.ne.jp:/var/www/html/ebacorp.xyz/eba-groupwork_ushijima
Author: ebauser ebauser@ik1-311-15561.vs.sakura.ne.jp
Date: Sun Nov 4 01:09:51 2018 +0900

git show HEAD@{0} でも確認可能(変更点も表示されるので分かりやすい)

commit 2079bc8b44df7cde51bb72ff6b4f5710e13bf64d
Author: ebauser ebauser@ik1-311-15561.vs.sakura.ne.jp
Date: Sun Nov 4 01:09:51 2018 +0900

再コミット

diff --git a/view/pc/chat_theme.html b/view/pc/chat_theme.html
index 357e3e5..0f503ca 100644
--- a/view/pc/chat_theme.html
+++ b/view/pc/chat_theme.html
@@ -154,10 +154,6 @@
<?php endforeach;?>
<?php endif;?>
<!-- ここまでループさせる -->
- <!-- Aさん (x.xxxxx@xxxxx.jp)
- Bさん (x.xxxxx@xxxxx.jp)
- Cさん (x.xxxxx@xxxxx.jp)
- Dさん (x.xxxxx@xxxxx.jp) -->

複数選択できます。


<!-- TODO 今回は、ひとまず不要(必要になったら実装) -->
ushijima@DESKTOP-VK55IR1:/mnt/c/Users/ushijima/Documents/eba-groupwork_ushijima$

reflog をデータリカバリに使う

間違えて意図と異なるコミットへ git reset --hard して、必要なコミットを失った場合
git reflog か git log -g で reflog を見る
失ったコミットがあれば、git reset --hard HEAD@{} でそのコミットへ HEAD を移動できる
git branch recover-branch HEAD@{} すれば、そのコミットが先端のブランチを作成できる
かんたんなデータリカバリをやってみる
現在、master が次のようなログだとする。

af3cfdd Add d.txt
d8441e3 Add c.txt
aefb89f Add b.txt
2dace69 Add a.txt

間違えて git reset --hard @^^ しちゃう。さらにターミナルとかをすべて閉じてしまって、もとの HEAD のハッシュ値もわからない。すると、ログは次のようになる。

aefb89f Add b.txt
2dace69 Add a.txt

そのままでは d8441e3 より先に戻れないので、reflog を使う。

$ git reflog
aefb89f HEAD@{0}: reset: moving to @^^
af3cfdd HEAD@{1}: commit: Add d.txt
d8441e3 HEAD@{2}: commit: Add c.txt
aefb89f HEAD@{3}: commit: Add b.txt
2dace69 HEAD@{4}: commit (initial): Add a.txt

直前に reset したことや、それ以前に commit していたことがわかる。

af3cfdd に戻りたいので、次のコマンドを叩く。

$ git reset --hard HEAD@{1}

すると、HEAD がaf3cfdd に戻る。

$ git log
af3cfdd Add d.txt
d8441e3 Add c.txt
aefb89f Add b.txt
2dace69 Add a.txt

git pull エラー

error: Could not read 28011e3f093de93236ee64bf2432e6d1f92ec0e9
warning: no common commits
remote: Counting objects: 1263, done.
remote: Compressing objects: 100% (1219/1219), done.
error: object file .git/objects/27/e68ccd1cb7192c8bda2418d198d90f1aff10a7 is empty
fatal: cannot read existing object info 27e68ccd1cb7192c8bda2418d198d90f1aff10a7
fatal: index-pack failed

●経緯

状況としては、昨日は仕事場のPCで作業したあとにgit push、家に帰って追加作業した git push、で、今日、仕事場で上記のエラー。
つまり、リモートリポジトリが最新状態で、ローカルリポジトリの方が古い状態。
なので、リモートリポジトリからpullできるようにするのが今回の目標

リポジトリが読み込めないなどのエラーが出る時に壊れたと思われる.gitをコピーする

cp -a .git .git-old

リポジトリの正当性をチェックする(壊れていないかの確認) オプションの完全なチェックを実行するには--full

git fsck --full

rmコマンドを使って、emptyのオブジェクトを削除します。

試しに一番上の6c2b8e42bdd36d9e47db64f56a85de6fa08e8cを消します。

rm .git/objects/27/e68ccd1cb7192c8bda2418d198d90f1aff10a7

削除できているかの確認

git fsck --full


emptyのエラーは、消えた

※まとめて消すと大変なのでまとめて消す時は、

find . -type f -empty -delete -print
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0