個人的備忘録です。
githubでなくgitlabつかってるのでプルリクじゃなくてマージリクエストになってます。
前提知識など
ワークツリー、インデックス、HEADを使いこなす
http://qiita.com/shuntaro_tamura/items/db1aef9cf9d78db50ffe
今いるbranchを確認する
アスタリスクが頭に付いてるやつが現在のブランチです
$ git branch
remoteブランチもみたい場合-aをつける
$ git branch -a
今いるbranchを最新にする
$ git branch
$ git pull
branchを移動する
$ git checkout <branch-name>
branchを作る
$ git checkout -b <branch-name>
pushの挙動を制御する
git config --global push.default current
git push
pushしたことないブランチでもオプションつけなくてよくなるので便利。
http://dqn.sakusakutto.jp/2012/10/git_push.html
branchのMergeRequestを作る
gitlabのブラウザの上のほうのメニューからどうぞ。
push直後なら全体のコミット履歴にマージリクエスト作るリンクが貼られてたりすることも。
作ったら確認してもらうために適宜お伝えする等しましょう。
AcceptMergeボタンが出ない場合にconfrictしそうかどうか前もって調べる
普通にマージしたいブランチに移動してmasterからマージするとコンフリクトしてたらそのファイルのメッセージが出るので
そのファイル開いて修正すればOKなようです。前もって知りたければ。
http://blog.inouetakuya.info/entry/20130602/1370173582
git checkout <マージしたいブランチ>
git merge master
特定のコミットだけマージしたい時
マージしたい対象のコミットidを調べてマージしたいブランチに移動して以下のコマンドを打つとマージされます。
git cherry-pick <commit-id>
http://rfs.jp/server/git/git-cherry-pick.html
コミットが1つだけのブランチを他のブランチにまとめたい時やmasterの更新を部分的に取り込みたい時などに。
mergeしてみたけどやっぱ元の状態に戻したいとき(ローカル上でリモートにpushする前の話)
マージしてみたけど、修正中のブランチで消したファイルがmasterで更新されてたときは戻してmaster側も消しとけばマージできそうとか色々ごっちゃりしてきて一度元に戻りたいときなどに。
git reset --hard HEAD
merge済みのローカルbranchを削除する
$ git checkout master
$ git branch --merged | grep -v '^*'
$ git branch --merged | grep -v '^*' | xargs git branch -d
mergeしてないけどやっぱ要らなかったpush済みbranchをリモートブランチも削除する
$ git checkout master
$ git branch -D <branch-name>
$ git push origin :<branch-name>
今さら聞けないgit pushコマンドによると、git push {ローカルのbranch}:{リモートのbranch}
と指定しているので、ローカルbranchを省略するというのは、nullをリモートにpushしてリモートが消されるという意味になる模様。
ブランチ名について
目的に沿った分かりやすい名前がよさそうです。
接続先の確認方法
$ git remote -v
origin git@gitlab.hoge.net:infra/test.git (fetch)
origin git@gitlab.hoge.net:infra/test.git (push)
接続先remoteが複数あるとき
ちょっとややこしいですが。
git remote リポジトリを複数登録する
http://bayashi.net/diary/2012/0714
stashで一時保存
一時保存したいときに。
http://qiita.com/fukajun/items/41288806e4733cb9c342
tagをつける運用
一時ちょっとやってたけど最近あんまりしてない。
バージョンタグをつける。タグはポインタであって見るだけ。ブランチ切らないと編集できないです。
tagつけてもpushは明示的にしないといけない。
以上。