概要
gitを用いての開発を、個人的にも、複数の会社でも経験してきましたが
そんな中で良く使っているgit commandをケースに合わせて淡々と書いてみようと思います。
(基礎的な物は省略します)
この記事では pushに force
をよく使っているので、一つのブランチを複数人で暖める開発事案には
不適切なことがございます。force
は用法・用量を守って正しくお使いください。
私的なgit command
branch作成
$ git checkout -b feature/WORK
空のbranchを作成
変更履歴に含めるのに適さない
画像やドキュメント等を管理したいときに使います。
直接URLでアクセスできるので、README.mdに記載して利用が可能です。
$ git checkout --orphan docks
commitした後に、やっぱりやり直したい
$ git reset --soft HEAD^
# commitを2個やり直したい
$ git reset --soft HEAD^^
# やり直した場合、以前のがpush済みならforceを付ける
$ git push origin feature/WORK -f
作業branchに基点branchの最新を取り込む
$ git pull
$ git merge develop
# 履歴を綺麗にしたいのなら rebase も有(conflictが発生したら、即終了が良いです。後半で少し触れます)
$ git rebase develop
↑のbranchの取り込みを無くしたい
今まで開発していて、hardが便利だと思ったケースです。
$ git reset --hard HEAD^
# push済みなら、forceを付ける
$ git push origin feature/WORK -f
別branchのcommitの一部を取り込みたい
$ git cherry-pick ${COMMIT_ID}
PRのレビューを受け、作業branchから切り替えるとき
手元の変更をロストしても良い場合(些細な変更など)
手元に保存されるため、もしもdisk障害など発生した場合はロストする可能性があります。
# 今の変更を保存
$ git stash save
# PRを更新したいbranchに変更
$ git checkout feature/REVIEW
~ ~ ~
# 修正が完了したらbranchを元に戻し、続きを行う。
$ git checkout feature/WORK
$ git stash pop
ロストは絶対に避けたい場合。
commit
# 中途半端な状態でもcommitしてpushしてしまう
$ git commit -a -m "stash"
$ git push origin feature/WORK
feature
# branchを作成
$ git checkout -b feature/WORK_stash
# 今の時点の変更をcommit
$ git commit -a
# push(Remoteに上げるので、ロストする可能性はほぼ無くなる)
$ git push origin feature/WORK_stash
# PRを更新したいbranchに変更
$ git checkout feature/REVIEW
~ ~ ~
# レビューの更新が終わったので、作業branchに戻る
$ git checkout feature/WORK
# stashを取り込む
$ git merge feature/WORK_stash
# 削除
$ git push origin :feature/WORK_stash
force-pushで更新されたbranchを取り込んでしまった場合
Conflictが発生したら、ローカルのbranchから削除し、対象のBranchに切り替えることで解消できます。
# Conflict発生ならmergeを中断
$ git merge --abort
# 更新されていないbranchに変更
$ git checkout master
# 該当するbranchを削除
$ git branch -D feature/WORK
# 該当branchに切り替える
$ git checkout feature/WORK
PRを作る直前にやる事
Rebase編
履歴を少しでも綺麗にしたいと思うので、とりあえずrebaseをしてみます。
1* rebaseに失敗すると大変なので、確実に変更を取り込むならmergeが良いです
2* rebaseに時間が掛かるようなら時間の無駄だと思っているので、mergeして一回でconflictを解消した方が良いです(ステマ)
$ git pull
$ git rebase develop
# conflictが無く無事にrebaseできたら、force push
$ git push origin feature/WORK -f
Merge編
$ git pull
$ git merge develop
# conflictが無く無事にmergeできたら、普通にpush
$ git push origin feature/WORK
最後に
まだあったと思うので、思い当たったら追記したいと思います。
参考記事
https://qiita.com/nantekkotai/items/2ed17c3d774211d234a4
https://qiita.com/ciloholic/items/769fba1c178a897cf42e