大まかな流れ
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の上書き
↓
指定したファイルを再度変更し、add
&commit
&push
[おまけ1]コンフリクトに気付く手段
git status
でboth modified
と表記されたらそこが怪しい!
→ git diff ファイルパス名
でコンフリクト箇所閲覧可能。
[おまけ2]自分の変更を全て取り消す方法
CLI上で解決
ちょっと変更したけど、変更を取りやめて前のコミットの状態に戻りたい時に有効。
git reset --hard コミットのハッシュ値
で、指定したコミットの状態に戻ることができる。コミットのハッシュ値は、git log
やgit reflog
で確認可能。
ソースツリー上で解決
自分の変更(Uncommited Changes)を選択
→ 変更を取り消したいファイルを選択して右クリック
→ リセット
[おまけ3]
とにもかくにも、
こまめにコミットすべし
これに尽きます。
こまめにコミット(プッシュ)していれば面倒なマージ作業もせずに済むので。