はじめに
自分が日常的に使っているgitコマンドとそれを使う理由(?)のようなものを備忘録がてらまとめる
なお、チーム開発かつGitHubやBitbucketなどを利用することを想定している
変更をステージング
$ git add [ファイル名]
全ての変更を一括でステージング(あまり使わない)
これはあまり使うべきでないかと(個人的な意見)
そのコミットに含めるべきでない変更点までコミットしてしまう危険性があるため
$ git add .
コミット
コミットメッセージは英語でも日本語でも良いので基本的につける
$ git commit -m "コミットメッセージ"
リモートのhogeブランチにプッシュ
たまにプッシュに失敗することがあるが、リモートリポジトリの権限が原因であることが多い気がする
リポジトリをいじれる権限が与えられているか、sshkeyが追加されているか、など確認すれば解決は難しくないはず
$ git push origin hoge
rebaseした後はローカルとリモートのブランチで整合性がとれないため、強制プッシュする必要あり
(rebaseについては後述)
$ git push -f origin hoge
リモートのhogeブランチをプル
プッシュと同じく、失敗することがたまにあるが、原因はプッシュできない場合とおそらく同じ
$ git pull origin hoge
ローカルにあるブランチ一覧の確認と現在いるブランチの確認
$ git branch
ローカルブランチの削除
例えば、feature/hoge
ブランチをリモートにプッシュし、そのブランチがリモートでdev
にマージされた場合、ローカルのfeature/hoge
ブランチは不要になる
不要なブランチは削除する必要あり
$ git branch -D feature/hoge
最新のコミット確認
$ git show
ログ確認
基本的に見やすくなるためのオプションをつけて使う
# オプションなし
$ git log
# 見やすくするためのオプション
$ git log --graph --oneline
ブランチの分岐点を修正する
rebaseを使う
rebaseは共同開発でめちゃくちゃ使う
developブランチに対してrebaseすることが多いかと
※厳密には、rebase=ブランチの分岐点を修正、ではないので注意
# 現在のブランチをdevelopブランチにrebaseする
$ git rebase develop
rebaseを使う場面
基本的な開発は以下の流れで進むと思う
-
develop
ブランチからfeature/hogehoge
などといったブランチを切って作業する - 作業終了後、developブランチにマージするようなプルリクエストをGitHubやBitbucket上で作成する
- プルリクが承諾されたらいよいよマージ
このマージされる段階で、feature/hogehoge
ブランチはdevelop
ブランチの先端から生えている必要がある
もし先端から生えていない(つまりfeature/hogehoge
ブランチを作成したときよりもdevelop
ブランチが進んでいる)場合、rebaseが必要になる
コミットをまとめる
こちらでもrebaseを使う
# 最新のコミットとその1つ前のコミットをまとめる
$ git rebase HEAD~~
上記のコマンドを叩くと、vimエディタが開き、下記のようなものが表示されるかと
pick コミットID コミットメッセージ
pick コミットID コミットメッセージ
上記を下記のように修正
pick コミットID コミットメッセージ
s コミットID コミットメッセージ
コミットメッセージを編集する画面に移るので、編集すればOK
一時退避、stash
別のブランチに移動して作業したい
でも、現在のブランチでの変更はコミットしたくないし、変更点を他のブランチに持っていくこともしたくない(addする前の変更点はブランチ移動すると一緒に持っていくことができてしまう)
そんな時にstashを使う
名前やメッセージをつけてstashすると管理しやすいかと
# 現在stashされているものの一覧確認
$ git stash list
# 名前というかメッセージをつけてstashする
$ git stash save [メッセージ]
# stashしたものを戻し、stash一覧から削除
# nはstashした際に自動的に振り分けられる番号、stash listで確認できる
$ git pop stash{n}
後からgitignoreを適用させる
.gitignore
ファイルに無視したいファイルを記述しても、すでにgit管理下にある(追跡されている)ものは無視してくれない
このような場合、対処法は2パターン
その1
# キャッシュを全て削除(git管理下から全て削除)する方法
$ git rm -r --cached .
その2
# .gitignoreファイルの内容を反映させる方法
$ git rm --cached `git ls-files --full-name -i --exclude-from=.gitignore`
上記のいずれかをやった後、addしてコミットすればOK
さいごに
rebaseコマンドを使う部分に関しては、誤解を生むような表現を用いている可能性が高く、また、本記事通りのコマンドを使っても上手くいかない場面も多いかと思うので、別途調べていただければ
修正点や追加点などあれば随時更新する