2019/09/18
Gitで運用していると、頻繁によくわからないトラブルに遭遇します。
このページで備忘録としてメモすることにしました。
INDEX
取り消し系
できない系
ログ・差分確認系
その他
特定のコミットまで戻したい場合
戻す対象のハッシュ値を調べる
指定したハッシュ値のコミットまで戻す
オプション
--hard コミット、インデックス、ファイルの変更をすべて削除する。
--mixed コミット、インデックスを削除。ファイルの変更だけは残す。
--soft コミットだけを削除する。インデックス、ファイルの変更は残す。
直前のコミットを取り消す
直前のコミットを取り消す場合は以下のコマンドでも可能です。
ちゃんと消えたか確認
「やっぱりさっきのgit reset
をなかったことにしたい」
そんなコマンドも実は用意されています。
git push を取り消したい場合
直前のコミットを取り消す
強制的に Push する
実は、この書き換えたブランチを push しようとすると、リモートにある以前のコミットとコンフリクト(リモートより歴史が短いブランチをプッシュしているため)して push できません。なので、強制的にプッシュさせる「-f」オプションを付けて強引に上書きします。
ちゃんと消えたか確認
git の add を取り消す
開発用ブランチに切り替えて作業を開始
masterブランチにチェックアウト
最新の状態にしておく
他のブランチに切り替える
masterブランチを取り込む
一時避難 → プル
現在の作業を一時避難
避難した作業を確認
実行時には以下のように情報が出力されます。
変更点を取り入れる
一時避難した処理を元に戻す
スタッシュを削除
すでにGitの管理下にあるものを除外する
すでに管理対象となっているファイルは、.gitignore
に記述しただけでは対象から外れません。以下の作業を行います。
.gitignore に追加
例:Thumbs.db を除外
ファイルを管理対象から除外する
--cached
オプションを付けることにより、ファイルを残したまま管理対象から外すことができます。
--cached
オプションをつけないと、ファイルごと削除されるので注意!
コミットする
このあとリモートにプッシュすると、リモートにあるTumbs.dbは削除されます。
ローカルにあるTumbs.dbは削除されません。
git pull の取り消し
1つ前の状態に戻す
- -hard
- ワークディレクトリの物理的変更を行う(ワークディレクトリの内容も書き換える)
- HEAD^
- 1つ前の状態
直前以外
reflog(参照ログ)とはHEADやブランチ先端の動きの履歴です。
・各個人のローカルリポジトリに存在します。
・ブランチの切り替え、新たに加えられた変更のプル、履歴の書き換え、あるいは単なる新規コミットの実行などを記録します。
git reflog
で履歴を確認してから「HEAD@{1}」などを指定してresetします。
git push ができない
git push したら以下のエラーが表示
これは自分がリモートの変更をpullしてから、pushするまでの間に他のpushがあるなどしてリモートが変更されているためです。
(※ブランチの先端がリモートより後ろになっているためです。)
対策方法
この場合、 git pull
すると解決します。
git pull ができない
git pull したらコンフリクト
対策方法
この場合、 git stash
すると解決します。
このあと git pull
を実行します。
git pull ができたら一時避難したデータをもとに戻します。
もとに戻したら削除で完了。
git checkout ができない
git checkout したらエラー
ブランチを切り替える時に下記エラーが出て切り替えられないことがあります。
対策方法
この場合、 git stash
すると解決します。
このあと git checkout master
を実行します。
git checkout ができたら一時避難したデータをもとに戻します。
もとに戻したら削除で完了。
その他のやり方として問題のデータをコミットしておくやり方があります。(※push はしません。)
変更履歴を戻すには、コミットしたブランチに戻ってから
git reset --soft HEAD^
git reset
git pull する前に差分を確認
git pull はいうなれば「git fetch & git merge」なので、git pull を実行すると、いきなりローカルブランチにマージがかかってしまいます。
これを事前に diff で差分を確認してから、git pull をします。
masterブランチを例で書くと以下のようになります。
コミット履歴を見る(最終形)
git log
コマンドを見やすくするためにオプションを付けました。
以下が最終形です。
特定のコミットでの差分が見たい
「このコミットでのdiffなんだっけ?」と確認したいときに使うコマンドです。
git add する前に変更点を見たい
git add
する前に、ある変更したファイルに対しての変更点が見たいケースです。
特定のファイルの履歴を調べたい
スタッシュにある変更差分を確認したい
ブランチ間の差分を見たい
何か気づいたら、また随時追加していく予定です。

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。