Git

とりあえず使う git コマンドまとめ

「とりあえず」と言っておきながら、複数コマンドの合わせ技や、オプションなどが必要なコマンドもまとめておこうと思います。

複数人で使う場合を無視して、個人で使うイメージで、「とりあえず」です。


1. init


先にリモートリポジトリを作ったとき

git clone <リポジトリ>



先にローカルリポジトリを作るとき

git init

git add README.md # 状況に応じてファイルを add
git commit -m 'first commit'

# ローカルで使用するだけなら以下は不要
git remote add origin <リポジトリ>
git push -u origin master # この後は -u origin master 不要


そして最低限、master, develop ブランチの構成にする。

git branch develop

誰のコミットか分かるように名前とメールアドレスを設定。

--global は git のインストール時にやっているとして、必要に応じてリポジトリごとに --local で。

(GitHub の場合は、独自のアドレスを使うことで自分のメールアドレスを公開せずに済みます)

git config --local user.name '名前'

git config --local user.email 'メールアドレス'

参考「Setting your commit email address on GitHub - User Documentation


2. ブランチ切り替え


既存のブランチに移動

git checkout <ブランチ>



ブランチを作成して移動

git checkout -b <ブランチ>



3. commit

基本的に develop ブランチで作業。


新規追加ファイル含めてコミット

git add . # .gitignore が適切に設定されている前提

git commit -m 'メッセージ'


新規追加ファイル含まない変更分のコミット

git commit -am 'メッセージ'


ちょっと特別な例として、


直前のコミットに変更を付け足す

git add . # .gitignore が適切に設定されている前提

git commit --amend --no-edit


直前のコミットメッセージを変更する

git commit --amend -m 'メッセージ'



間違えて develop に commit したかったのを master にしてしまった、みたいなとき

git cherry-pick <コミットID>


また、コミットで Issue を閉じたいときは、メッセージに close #<番号> を入れる (詳しい書き方はここでは省略) 。


4. merge

慣れないとどっちがどっちのブランチか悩みそうです…。

変更を <from ブランチ> から <to ブランチ> に持っていきたいとして、<to ブランチ> に checkout した後、<from ブランチ> から merge で変更をもらうイメージです。

(master に移動し、develop からもらう)

git merge --no-ff --no-edit <ブランチ>

コンフリクト時は手動で修正または以下コマンド。


自分のブランチのファイルを選択する

git checkout --ours <ファイル名>



相手のブランチのファイルを選択する

git checkout --theirs <ファイル名>


コンフリクトを直したら commit する。


5. push


ブランチごと

git push



タグ

git push origin <タグ名>


ちょっと特別な例として、


過去改変などをしたときに強制 push

git push -f


(個人で使っているリポジトリなら使ってもいいと思います)


6. tag

Git でいう tag は、複数のコミットに同じ tag が付くことはなく、ある 1 つのコミットに対して付く。


直前のコミットに tag を付ける

git tag <タグ名>


主に master ブランチのコミットに v1.0.0 のようなバージョンタグを付けるのに使う。

GitHub なら tag を付けたコミットが releases の一覧の所に表示されるようになる。


7. 色々な情報を見る

git status

git diff

git log

それぞれ細かい機能が色々あります。


8. とりあえず使う運用



  • develop ブランチで commit, push


  • master ブランチで develop から merge, tag 指定, push, タグ push (緊急時の修正は master に commit)

の繰り返し (develop に戻り忘れたら cherry-pick) 。

しっかりやるなら、develop から feature/release を生やしたり、master から hotfix を生やしたりするのですが、個人でとりあえず使う、みたいな場合は、master, develop だけでなんとかなると思います。


9. その他

上記で書かなかったこと。


  • ファイルの移動は git mv または普通の mv でも追跡可


  • git rebasegit merge に似たもので、ちゃんと理解していないなら使うべきではない

  • その他、reset, pull/fetch, stash, HEAD を使ったコミットの指定, タグ・ブランチ削除など

  • 複数人の場合には、master をいじられないようにするとか、プルリクエストとか

他にも様々な機能がある。