毎回ググってる気がするので、いい加減まとめる。※もっと効率のよい方法があったら教えて下さい
ブランチ関連
・ブランチ名を変更
andoriod
を android
に変更したい場合。(androidのスペルミスってホント多い)
$ git branch -m andoriod android
このあと android
ブランチをリモートに push すると、新しいブランチとしてプッシュされる。つまり、リモートに andoriod
ブランチは残るので不要なら消す。
・ブランチを削除
ios7 というブランチを消したい場合。
まずはローカルから削除。
$ git branch -d ios7 Deleted branch ios7 (was 57c1b0b).
次にリモートブランチも削除。
$ git push origin :ios7 To https://xxx.git - [deleted] ios7
他にもいろいろ方法があるっぽい。
Git で不要になったリモートブランチを削除する - koogawa blog
コミット関連
こんな状態だったとする。(コミットIDなどは架空のものです)
$ git log commit 8d12ee312dfde3700265e088d850ae652fd4dc Author: Kosuke Ogawa <koogawa@koogawa.com> Date: Fri Sep 26 20:09:41 2014 +0900 カテゴリ取得処理をモデルに移した commit 3c09ba0351e8728e3dbb5633d293d16e346e10 Author: Kosuke Ogawa <koogawa@koogawa.com> Date: Fri Sep 26 20:08:36 2014 +0900 ベニュー用のデータモデルを作ったった commit 33da911e7d8c4758136d8af58f64ee9d011dd2 Author: Kosuke Ogawa <koogawa@koogawa.com> Date: Fri Sep 26 17:46:49 2014 +0900 削除フラグが更新されない不具合の修正
・変更内容を破棄
変更内容を破棄(Xcodeで言うdiscard)して、最後のコミット 8d12ee312dfde3700265e088d850ae652fd4dc の状態まで戻したい。
git reset --hard HEAD
・コミットをひとつ取り消す(プッシュ前)
最後のコミット 8d12ee312dfde3700265e088d850ae652fd4dc を取り消したい。
git reset --soft HEAD^
--soft
オプションを付けたのでコミット 8d12ee312dfde3700265e088d850ae652fd4dc の変更内容までは失われない。よって、この状態で git status
すると差分が出る。
変更内容も破棄したい場合は --hard
オプションを付ける。
git reset --hard HEAD^
・コミットをひとつ取り消す(プッシュしちゃった場合)
まずは最後のコミット 8d12ee312dfde3700265e088d850ae652fd4dc を取り消すためのコミットを作る。
$ git revert 8d12ee312dfde3700265e088d850ae652fd4dc [xxxxx 529c688] Revert "カテゴリ取得処理をモデルに移した"
これをリモートにプッシュして完了。
コミット自体を強制的に無かったことにする方法もあるが、共同作業ではやらないほうが良い。
・コンフリクト解決+手動マージ
Pull Requestがたまにオートマージできなくなるので、そんときの対処法。develop-refactoring
ブランチを develop
に手動マージする例。
まずはマージ先のブランチ develop
に移動して最新の状態にしておく。
$ git checkout develop $ git fetch origin
そしてマージ。
$ git merge origin/develop-refactoring
コンフリクトが発生するので対応する。解決したら add してコミット。この際、コミットメッセージは自動で付加される。
$ git add . $ git commit
最後にプッシュして手動マージ完了。
git push origin develop
コンフリクトしないために
定期的にブランチ分岐元(上の例だとdevelop)の最新ソースをマージするようにしておくとコンフリクトがおきにくい。
タグ関連
・タグを確認
git tag -n
・タグを追加
$ git tag -am "注釈をここに書け" TAGNAME
リモートにもプッシュ。
$ git push origin TAGNAME
・リモートのタグを削除
リモート origin のタグ TAGNAME を削除するには、次のようにする。
$ git tag -d TAGNAME $ git push origin :TAGNAME
ローカルでタグを削除してから、リモートに「空のタグを送りこむ」という感じ。