ファイル部分的にstaging
$ git add -p <file>
hunk毎にどうするか聞いてくれる
diff
# diff staged vs working copy
$ git diff
# diff staged vs head
$ git diff --cached
branch削除
local branch
$ git branch -d <local_branch>
remote branch
remote branchはダイレクトに消すコマンドでなくて。local branchに空を指定して、それをPushする
$ git push origin :<remote_branch>
git diff
difftoolを使うとmeldなどGUIツールが起動できる。
$ git difftool hoge.cpp
-dを付けるとディレクトリ比較になる(らしい)
$ git difftool -d .
リモートのタグ表示
$ git ls-remote --tags
リモートブランチも含めたブランチ一覧を表示する。
$ git branch -a
リモートブランチへCheckOut
$ git checkout -b local_branch_name origin/remote_branch_name
個人的によくあやふやになるgit pushの構文メモ
$ git push origin <local_branch>:<remote_branch>
branchを切って作業すべき所をうっかりmaster(もしくは別のbranch)にコミットしてしまった時の対処
他の人がpullしてcheckoutしてると混乱の元なので非常手段
まず、本来branchを切るべきだったコミットのhashを確認
$ git log --oneline --decorate --graph
* zzz (HEAD -> master)
* yyy
* xxx
* www
例えばhash www(本来branchを切るべきだったコミット)で, xxx,yyy,zzzの3つが本来branch上でコミットすべきものだったとする
本来branchを切るべきだったbranchを切ってcherry-pickする
$ git branch mybranch www # mybranchを本来切るべきだった箇所から切る
$ git checkout mybranch # mybranchへ移動
$ git cherry-pick www...zzz # mybranch上でxxx,zzz,zzzをpick。hashは新しくなる。注意点は...の左側はxxxじゃなくてwww(ひとつ前)にすること
mybranchとmasterにそれぞれ同じコミットが別hashで追加されてるのでmasterを戻す
$ git checkout mater
$ git reset --hard www # masterを戻す。HEAD-2とかHEADから2つ戻すような記述も可
pushする(他のユーザ注意喚起が必要)
$ git checkout mybranch
$ git push origin mybranch # mybranchをpush
$ git checkout master
$ git push --force origin master # masterを強引にpush