Edited at

良く使う、私的な git command のまとめ


概要

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