1295
1286

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitAdvent Calendar 2012

Day 30

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

Last updated at Posted at 2012-12-26

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に助けを求めてみる

1295
1286
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
1295
1286

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?