Help us understand the problem. What is going on with this article?

gitでありがちな問題の解決方法まとめ

More than 5 years have passed since last update.

Git Advent Calendar / Jun. 最終日(30日目)の記事です.29日目は「いざという時のためのgit reflog」でした.
Git Advent Calendar最後なので,git操作でやりがちなミスからどう回復するかをまとめます.他にもあればコメントもらえるとマージしていきます.

ブランチを切り忘れてmasterでコミットしてしまった

その時点でブランチを切る&reset --hardで間違ったコミットたちをmasterから消す

$ git checkout -b new-branch
# masterの最新コミットを消す
$ git checkout master && git reset --hard HEAD~

ブランチを移動し忘れてコミットしてしまった

cherry-pickでコミットを引っ張ってくる.

# 現在間違ったブランチ(bad-branch)にいる
$ git checkout good-branch
$ git cherry-pick bad-branch # 間違ったブランチに行なったコミットを持ってくる
# 間違ったブランチに行なったコミットを消す
$ git checkout bad-branch && git reset --hard HEAD~ 

間違ったコミットをpushしてしまった

個人プロジェクトならコミットを消して反則技のgit push -fする.そうでないなら,可能な限り速やかにgit revertを使って「間違ったコミットを打ち消すコミット」を行ない,pushする

マージ済みのブランチが大量にある

git branch --mergedで一覧が見られるので,masterとカレントブランチ以外を以下のようにして消す.

$ git branch -d $(git branch --merged | grep -v master | grep -v '*') # masterと現在いるブランチは消さない

間違ってreset --hardで戻しすぎた

git reflogを使う.詳しくは昨日のエントリ(いざという時のためのgit reflog)を参照.

重要なstashを消しちゃった

git stash dropしたり,git stash pop -> git reset --hardしたとき.
git fsckするとdangling commitが見られるので,git cherry-pick <SHA1>git stash apply <SHA1>してあげるとよい.
git gcが走ってたら消えてるかも.

コミットメッセージでtypoした

直前のコミットの場合はgit commit --amendを使う.amendと打つのが面倒なので,git commit --amendgit fixにエイリアスしてる

$ git commit # コミットメッセージでtypoした
$ git commit --amend # 入力しなおす

ブランチを移動しようとしたら怒られた

以下のようなメッセージが出たとき

$ git checkout fix/piyo
error: Your local changes to the following files would be overwritten by checkout:
        config/deploy.rb
Please, commit your changes or stash them before you can switch branches.
Aborting

消してもいい変更ならgit reset --hard HEADとかgit co .する.後者をよく使う.
消さずに保存したい場合はきちんとコミットするか,stash saveする.
git stashについてはfukajuneさんの「変更を一時的に退避!キメろgit stash」が詳しいです.

昔のコミット内容にちょっとしたバグを見つけた

そのコミットをまだpushしていない場合限定
新しく行なった変更を以前のコミットに含めたい.

直前のコミットに含めたい

上記のcommit --amendを使うとよい.

それ以上古いコミットに含めたい

変更をcommitしたあと,git rebaseを使う.

$ git commit -m '適当なメッセージ'
$ git rebase -i HEAD~3 # 修正したいコミットを指定
# エディタが立ち上がるので,'適当なメッセージ'のコミットを修正したいコミットの下に移し,先頭をsquashに変更する

その他困った

QiitaのGitタグ投稿を見るか,git-tasuketeに助けを求めてみる

yaotti
Qiitaを作っているIncrements株式会社の創業者
http://yaotti.hatenablog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away