koogawa blog

iOS、Android、foursquareに関する話題

自分がよく使うGitコマンドメモ

毎回ググってる気がするので、いい加減まとめる。※もっと効率のよい方法があったら教えて下さい

ブランチ関連

・ブランチ名を変更

andoriodandroid に変更したい場合。(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

ローカルでタグを削除してから、リモートに「空のタグを送りこむ」という感じ。