[alias] a = add br = branch ci = commit co = checkout cp = cherry-pick di = diff st = status k = "log --graph --pretty='%x09%h %ci %cn%x09%s %Cred%d'"では個人的によく使いそうなイディオム、あるいは自分がhelpを引かずに打てるコマンドを書きだしてみる。
git diff今の作業中の差分なんだっけ、とかコミット前に差分を整えたりとか。
git stこれも作業状況の確認。
どのブランチに居るかとかも分かるけど、自分はshellのステータスに常にブランチを出しているからその目的では使わない。
git kコミットログ一覧をグラフ付きで。
ただ、androidのようなプロジェクトだとmerge commitだらけで役立たないことが多いけど。
git log -p差分付きでログが見たい。
git log --oneline --no-merges android-4.2.1_r1..android-4.2.2_r1android4.2.1から4.2.2の差分って何があるんだっけ?
とりあえずマージコミット抜いて一覧が欲しい。
git di --stat android-4.2.1_r1..android-4.2.2_r1差分がありすぎてよく分からんから、どのあたりのファイルが変更されてるのかだけ知りたい。
git di android-4.2.1_r1..android-4.2.2_r1 -- hogeそれでも差分多いなあ。
気になるhogeディレクトリ以下の差分だけ見てみるか。
git co XXXXリモートブランチやタグもブランチ作らずにcheck outして、作業したくなった時点でブランチ作ればok。タグやハッシュのcheck outならブランチ作らずにHEADを延ばして後でブランチを作っても良いし。
git br ore-branchてことで作業したくなったのでブランチを作る。
git co -b ore-branch XXXXいやいや、今回は最初からブランチ作って作業やる気まんまんですよ。
git stashブランチ切り替える前にstashで今のテンポラリだけ念のため退避。
ちゃんとしたものだったらブランチ切ってコミットだけど、後で要るかも程度の、そこまで手間を掛けるほどではない一時的なものはstash。
git stash poppopで戻し。
git ci -av今ある差分を全部コミット。
コミットする際に差分を表示してチェック出来るようにする。
git co -- iranaiなんかゴミ差分出てるファイルがあるな。戻しておこう。
git a XXX git ci -v作業にゴミが混じってるから、一部のファイルだけコミット。
git a -p XXX git ci -v一部のファイルの一部分だけをコミット。
この1行の変更だけは別コミットがいいかな、とかいう時。
git ci --amendコミットログ、タイポしとるやん。直そう。
git reset HEAD^今のコミットなし!やり直し。
これで手直ししてからcommitするとか、やっぱ破棄するとか。
ちょっとした手直しならgit commit --amend -aでも良いけど。
git reset --hard HEAD^今のコミット駄目だこりゃ、もう君とは二度と会わない。削除。どうしてもまた会いたくなったらreflogで探す。
git revert XXXやばい!もうpushしちゃった奴、ビルブレしてるぞ。
手元で再現しないし、とりあえずリバートコミット作ってpushだ。
git cp XXXなんかこのブランチ、もうコミット制限かかってるし、必要最小限なセキュリティパッチだけ本線から入れとくわ。
git showええと、さっきコミットしたログなんだっけ。
git rebase -i HEAD~5ちょっと最近のコミットの順番とか、いろいろ整理したい感じ。
git rebase master今の作業ブランチ、マスターに移動しちゃえ。
fetchした後、origin/masterにrebaseとかも多い。
branchするときに--trackつけてpullしてもいいけど、勝手にmergeされるのが嫌だから自分はfetch+手動でrebase or merge派。
git merge --ff XXXXXこのブランチはFast forwardで取り込もう。
プロジェクト的にできるだけコミットグラフを一直線にしてるときは、rebaseしてmergeって形になると思う。
git merge --no-ff XXXXXこのブランチは後からも延ばしたいしブランチの形状をmasterに残したいから、マージコミットを残しておこう。
successful git branch的な運用では必須。
git clone URIこれがないと基本始まらなかった。
他所様のレポジトリを持ってくる。
git initパパ、新しくgitレポジトリ作っちゃうぞー、ってとき。
git init --bare hogeバックアップ用とか、中央レポジトリ用にpushできる先作っとこう、というときにそのサーバ側でベアレポジトリを作成。
git remote add REMOTENAME URIちょっと他のレポジトリを取り込むか、ってときにまずはremote addでuri登録。
git remote -v一体どんなリモートホストを登録したのか忘れた。
vi .git/configリモートホストとか編集したい。gitのコマンド覚えてないので直接configいじっちゃう。
git fetch REMOTENAME実際にリモートから取り込んでみる。
git br -rリモートのブランチ一覧。
git k --allとりあえず全コミットグラフを見てみるか。
git log --author=HOGEHOGEさんのコミット一覧。
git br --contains XXXXXXXXっていうコミット、どのブランチに入っているんだっけ。
git tag --contains XXXX -l android*XXXXっていうコミット、どのタグに入っているんだっけ。
androidタグに限定するとどれだ?(タグが有り過ぎるときに有効)
git push REMOTEHOST ore-branch:omae-branchよし、REMOTEHOSTへ手元にあるore-branchをomae-branchとしてpushだ。
ブランチの一部だけpushしたいときは、ore-branchじゃなくてハッシュを指定。
普通は同じブランチ名でpushするから、:以降は省略する。
git tag TAG XXXXXXにタグ打っとくか。
git push REMOTEHOST TAGタグをpushしとくか。
git push --tagsはテンポラリのtagまでpushされて悲惨なことになったことがあるので、もう二度と使わない!
git push REMOTEHOST TAG:やばい、タイポしたタグをpushした。消そう。
ブランチも同じ要領で。
ただ、まともなレポジトリサーバだと取り消しは許されないし、そうでなくとも誰かがfetchしてると非常に面倒くさいことになるので、普通はやったらアカン。つまり、push前は慎重に。
git reflog git co HEAD@{1}やばい、rebaseしたら訳わからんことになった!とかいう時はこれでどっかに戻す。
git show android-4.1.1_r1:Android.mkandroid-4.1.1のAndroid.mkってどんなんだったっけ?
git show android-1.6_r1:Donutsの頃のディレクトリ構成を懐かしみたいわー、というとき。
くらいかな。他に思い出したら追加します。
他にもfilter-branchとか強力なコマンドもあるけど、日常では使わないからググらないと使い方わかりません。
git最強のオプション filter-branch
http:/