2016/02/18

自分用git コマンドメモ

ファイル部分的に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