まだあわてるような時間ではございません。
インデックス
1.コミットメッセージを間違えちゃった! -- 直前のコミットのやり直し
2.そろそろブランチを整理しなきゃ! -- ブランチの名称変更と削除
3.間違ってコミットしちゃった! -- コミットを取り消す3つのリセット
4.別のブランチをプッシュしちゃった! -- リモートブランチのリセットと削除
5.コミットの順番を間違えちゃった! -- コミットログの並べ替えと削除
6.コミット細かすぎィ! -- コミットログの統合と編集
7.あのコミットさえあれば…! -- 他のブランチのコミットを適用する
8.やばい!ハードリセットしたら消えちゃった! -- 過去の状態の復元
9.masterにマージ後にバグ発生!どうする!? -- コミットを打ち消すコミット
1.コミットメッセージを間違えちゃった! -- 直前のコミットのやり直し
エディタが立ち上がるので編集しましょう。コミットIDは変わります。
$ git commit --amend
2.そろそろブランチを整理しなきゃ! -- ブランチの名称変更と削除
バックアップ用にブランチを切って後で削除するという用途によく使っています。
ブランチ名変更
$ git branch -m <old_branch> <new_branch>
ブランチ削除
$ git branch -D <branch>
3.間違ってコミットしちゃった! -- コミットを取り消す3つのリセット
リセットはワーキングディレクトリとステージの状態によって3種類あります。
ワーキングディレクトリはそのままでステージとコミットをリセット
$ git reset <commit>
ワーキングディレクトリもステージもそのままでコミットだけリセット
$ git reset --soft <commit>
ワーキングディレクトリ, ステージ, コミットの全てをリセット
$ git reset --hard <commit>
4.別のブランチをプッシュしちゃった! -- リモートブランチのリセットと削除
共用リポジトリで使うと怒られたり泣かれたりするのでやめましょう。
そういうときは後述のrevertを使うと良いかもしれませんね。
リモートブランチのリセット
$ git push -f <repository> <commit>:<branch>
リモートブランチの削除
$ git push <repository> :<branch>
もしくは、1.7.0以降ならこちらでもOKです。
$ git push --delete <repository> <branch>
5.コミットの順番を間違えちゃった! -- コミットログの並べ替えと削除
エディタが立ち上がるので並べ替えたり削除したりしましょう。
push前にログを整理するのによく使われます。
$ git rebase -i <commit>
6.コミット細かすぎィ! -- コミットログの統合と編集
まずはエディタを立ち上げます。
$ git rebase -i <commit>
親コミットに統合したい子コミットのpick
をfixup
に書き換えます。
コミットメッセージを編集したいコミットはpick
をedit
にします。
pick xxxxxx parent
fixup yyyyyy child
edit zzzzzz hoge
7.あのコミットさえあれば…! -- 他のブランチのコミットを適用する
リベースだと都合が悪いときに使います。
$ git cherry-pick <commit>
8.やばい!ハードリセットしたら消えちゃった! -- 過去の状態の復元
落ち着いてください。全ての操作は記録されています。
ログから親コミットを指定してハードリセットします。
$ git reflog
zzzzzz HEAD@{0}: reset: moving to <commit>
yyyyyy HEAD@{1}: foo
xxxxxx HEAD@{2}: hoge
$ git reset --hard HEAD@{1}
9.masterにマージ後にバグ発生!どうする!? -- コミットを打ち消すコミット
revertして修正後に再度マージしましょう。
revertはコミットログに残ります。
$ git revert <commit>