どうも。
GITを使って個人でも職場でも開発をしているのですが、どうもよくわからんコマンドが多くて困る、という人はいると思うので、特にこれさえ知っておけば基本困ることはないっていう基本セットをまとめてみようと思います。
書いてたらちょっと多いなって思いましたが、使っているうちに身についてくるのでそこまで気にならないと思います。
※細かいコマンドの実行例は載せません。
- git branch
- git status
- git checkout
- git diff
- git tag
- git log
- git fetch
- git merge
- git rm
- git add
- git commit
- git pull
- git push
- git stash
- 逆に、あんまり使いたくないセット
git branch
現状のブランチと、今手元にあるブランチのリストを表示。たくさんのブランチを行き来してると今どこで開発してるっけ?ってなるので、これは確認のためによく使うと思います。
git status
現状の修正をすべて確認 & ブランチを確認とできる便利コマンド。頻繁に使うことでしょう。
git checkout
ブランチ移動、新規のブランチ作成、origin/もしくはremoteにあるブランチを手元に持ってきたり、ファイル単位で特定バージョンに戻したり。これも頻繁に使うでしょう。
git diff
修正をソースレベルで見ることが出来る。githubに上げるまえに見れるので、便利。A..Bみたいにコミット履歴指定すればその間の修正をまとめて見れるので、リリースするファイルの一覧を再確認したい場合にも使えますね。
git tag
リリース前に現状での完成版を保存する目的でよく使われます。1人で開発するときでもなかなか使えます。ただ、切り戻しがない限りはあまり日の目を見ないかも?
git log
重要。revertしたくなった時にかぎらず特定のファイルを戻す時にも参照するし、gitで運用するのであれば多用するので--graphなどのオプションと合わせて覚えたほうがいいです。
git fetch
あんまり使わないかもですが、git pull出来ないときは後述のgit mergeと合わせて使います。remoteにあがってるブランチをまとめてorigin/へ持ってきます。
git merge
複数人で開発してる場合に必要です。
自分と他の人のcommitタイミングによってはpush時にエラーを吐くと思いますが(pullもpushも失敗するような状態)、そんな時はこれで解決。
たまに起こるconflictの解消はもう定番ですね。。
git rm
今バージョン管理されてるけど今後要らないんだよね、なファイルがあればこれでリポジトリからも消してしまいましょう。
git add
必須。ファイル単位で指定出来るので、コミットを分けたいなら必要なファイルだけaddするのもありですね。
git commit
必須。コメントをつけてなんの修正かわかるようにする習慣をつけたほうがいいです。
git pull
基本中の基本。1人で開発するのでなければよく使います。こけたら、fetch→mergeでほかの人の修正を取り込み。
git push
開発の基本というかこれがないと全く機能しませんねw
ただし-fつけるのは非推奨でしょう。。pushにコケたからといって-fを付ける前にかならず解決策が有るので、手詰まりなら詳しい人に聞いたほうがいいです。
git stash
これは知っておくと大変便利。GITでは現状の修正を持ったまま誤ってgit checkoutすると、その修正を引き継いでブランチ移動してしまう仕様ですが、git checkoutするためにいちいちすべてgit checkoutで戻していたら面倒ですよね。。
そこで、一時的にsaveした状態で他ブランチに移動して、また元ブランチに戻ってきてさっきの修正から続きができるようになるので、便利。
逆に、あんまり使いたくないセット
git reset --hard
履歴が消えます。怖すぎ。どうしても使わないといけないシーンになったら反省。
git revert
使ったところで異常が起きるわけでもないですが、連打すると履歴が汚染されてたどりづらくなります。
commitしたけどその修正、要らなかった。という場合は、ファイル単位でgit checkoutして戻したほうが面倒ですがオススメ。
git rebase
封印しているチームは多いのでは?いくら便利でも、バージョン管理において履歴が汚れるのは嬉しくありません。
git cherry-pick
便利そうなコマンドだけど、チームで開発するならまず使わないコマンドかと。
履歴をいじくるので、かなりのリスクを伴うコマンドだと思って間違いありません。余程腕に覚えのある人だけに限ったほうがいいかも?
コマンド以外にはそもそものバージョン管理の仕組み、利用上のブランチの切り方などチームで開発する場合はルール決めを怠らなければスムーズに開発が出来ます。マージ時のconflict解決、non-fast-forwardエラーなどの問題も見てすぐ解決できるようになれば、
それをさらにステップアップしてたくさんマージしたあとに障害発生して特定のブランチを戻す、といったことまで出来るのなら、知識的には運用もまず問題ないと思います。
SVNとかCVSとかWindows VSSとかはよくわかりません。自分にあったバージョン管理システムを使えばいいと思いますがトレンド的にはやっぱりGITなのかな?
今回はこの辺で。