euphonictechnologies’s diary

Haskell超初心者の日記です。OCamlが好きです。

follow us in feedly

会社で使うgitコマンドのまとめ

よく使うコマンドをまとめてみました。

作業を始める前によく使うコマンド

$ git co master

masterに移動します。今後masterはポリコレ的に改名されるらしいですが…。

$ git config --global alias.co checkout

でaliasを設定しておきましょう。

$ git pull

まずはpullしましょう。featureブランチにいてmasterでpullせずにindexだけoriginからのアップデートを受ける時は

$ git fetch

ですね。

$ git co -b <feature branch name>

から開発作業開始です。ブランチ名はたいていチケットの番号とかIDとかを使う会社がほとんどかと思います。

$ git co -

でcdと同様にさっきまでいたブランチに戻れます。

作業中によく使うもの

$ git st

でコミットステータスの確認をします。

$ git config --global alias.st status

してalias設定しておきましょう。

$ git stash

で作業仕掛けのまだコミットしていないファイルをとりあえず退避します。

$ git stash pop

でstashしたファイルを戻します。

$ git stash list

するとstashしたものの一覧が見られます。

作業がとりあえず終わったら

$ git diff

でコミット前に変更内容を確認します。

$ git add -u

すると一括でmodifiedされたファイルの変更をstageできます。

$ git add -p

で変更箇所を一つずつ確認しながら対話的にstageできます。

$ git diff --staged

で今からコミットする変更の最終確認をしましょう。stageされた変更のdiffが見られます。

コミットしてプッシュ

$ git ci -m "コミットメッセージ"

でコミットです。

$ git config --global alias.ci commit

でaliasを設定しておきましょう。

$ git ci --amend

で間違えたコミットメッセージを修正できます。

$ git rebase -i <コミットを集約するcommit idの1個前のcommit id>

リモートに自分の迷いとか作業途中のコミットを全部送るはやめましょう。綺麗なツリーが大事です。 このコマンドでどのコミットを残してどのコミットをsquashするかを選んで集約できます。指定するcommit idは大体originの指しているコミットかまだpushしたことがなければmasterのコミットになると思います。

$ git push origin <remote branch name>

綺麗なツリーになったら変更内容をリモートにpushします。これで作業はおしまいです。Pull RequestなりMerge Requestなりを上げてコードレビューを始めましょう。

コードレビュー中にmasterとconflictしちゃったら

$ git co master
$ git pull
$ git co -
$ git rebase master

してmasterをrebaseしましょう。rebase中にconflictを解消しながらbaseのmasterを前に進めていきます。

$ git push origin <remote branch name> --force-with-lease

でrebaseした内容をリモートにpushします。--force-with-leaseはpushする内容が新しい場合だけpushが効くようにするオプションです。古い内容でpushするのはほとんどの場合で間違いなので念のためにいつでもつけるようにしましょう。

他に便利なコマンド

alias.tree=log --graph --all --format="%x09%C(cyan bold)%an%Creset%x09%C(yellow)%h%Creset %C(magenta reverse)%d%Creset %s"

$ git tree

が使えます。便利です。こちらを参考にしました。

qiita.com

alias.delete-merged-branches=!git branch --merged | grep -v \* | xargs -I % git branch -d %

$ git delete-merged-branches

が使えます。マージ後にmasterに取り込まれたブランチをざっくり全部消すのに使えます。マージされていないものは消えませんので安心してください。こちらを参考にしました。

qiita.com

最低限これだけあれば普通に仕事できるはず

他にもたくさんの技があるのでネットで色々見てみるといいかと思います。