LoginSignup
128

More than 5 years have passed since last update.

git rebase 失敗した時の対処法

Last updated at Posted at 2014-08-18

大まかな流れ

git add .
git commit -am "message"
git push origin master

最後のpushがうまくいかない時(他の誰かがpushしてる時)の解決策の1つとして、rebaseしてからpushする方法がある。

git fetch origin
git rebase origin/master
git push origin master

とすれば、コンフリクトしない限りpushできる。
以下、このrebaseが失敗した時の対処法を記述する。

[解1]コンフリクトを手動で直す

まず、コンフリクト箇所を手動で直す。
その後、以下のコマンドを実行。

git add コンフリクトを解消したファイル名1
git add コンフリクトを解消したファイル名2
(直したファイル数分繰り返す)
git rebase --continue
git push origin master

※コンフリクトの記号に関しては下記URL(公式ドキュメント)参照。
http://git-scm.com/book/ja/Git-%E3%81%AE%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E6%A9%9F%E8%83%BD-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%81%A8%E3%83%9E%E3%83%BC%E3%82%B8%E3%81%AE%E5%9F%BA%E6%9C%AC

pullとかrebaseとか、Eclipseの外部から変更が加えられた時はF5コマンドでリフレッシュすべし。

[解2]指定したファイルをコミットから取り除く

git rebase --abort #rebaseのキャンセル

 ↓
ソースツリー上でコミットしたファイルを「Hunk を戻す」でcommit解除
(正確には、逆向きのコミットを貼り、後で上書きすることでコミット解除したように見える)
 ↓

git commit -a --amend #commitの上書き

 ↓
指定したファイルを再度変更し、addcommitpush

[おまけ1]コンフリクトに気付く手段

git statusboth modifiedと表記されたらそこが怪しい!
→ git diff ファイルパス名でコンフリクト箇所閲覧可能。

[おまけ2]自分の変更を全て取り消す方法

CLI上で解決

ちょっと変更したけど、変更を取りやめて前のコミットの状態に戻りたい時に有効。

git reset --hard コミットのハッシュ値

で、指定したコミットの状態に戻ることができる。コミットのハッシュ値は、git loggit reflogで確認可能。

ソースツリー上で解決

自分の変更(Uncommited Changes)を選択
→ 変更を取り消したいファイルを選択して右クリック
→ リセット

[おまけ3]

とにもかくにも、

こまめにコミットすべし

これに尽きます。
こまめにコミット(プッシュ)していれば面倒なマージ作業もせずに済むので。

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
128