Gitについての、流れをまとめてみました。
リポジトリとは
Gitでファイルを管理する場所
- ローカルリポジトリ
- リモートリポジトリ(publicリポジトリとprivateリポジトリ)
Gitコマンドと流れ
①リモートリポジトリ→ローカルリポジトリへダウンロード
- git clone (新規)
- git pull origin (上書き)
②gitの管理
-
git status(状態の確認)
・赤文字:gitで管理していないファイル
・緑文字:gitの管理化にあるファイル(ステージング) -
git add ファイル名
gitでファイルを管理させる際に使用(ステージングする際に使用)
※git add . と最後にファイル名ではなくドットをつける事により全てのファイルをステージング -
git commit -m "コミットメッセージ"
gitに保存する -
git log
コミット履歴の確認
③ローカルリポジトリ→リモートリポジトリへアップロード
- git push origin
- git push origin develop(developブランチへアップロード)
※originはリモートサーバーのこと
ブランチ
ブランチを切る
- git checkout -b develop master(マスターからdevelopブランチを切るという意味)
ブランチの切替
- git checkout master(マスターブランチへ切替)
- git checkout ブランチ名(作業するブランチへ切替)
ブランチの確認
- git branch
- git branch -a(-aがつくとリモートも含めた全てのブランチを表示)
マージ
- git merge develop(developブランチをマスターへマージ)
※マージしたいブランチ(マスター)で行う
プルリクエスト(GitHubを使ったマージ前の確認)
作成したブランチをマスターにマージしてもらいたいという依頼のこと
- AさんがGitHubでプルリクエストを作成(Create Pull Request)
- Bさんが内容を確認しレビューを行う(Files changed箇所で変更画面の確認・コメントを記述ができる)
- 最終的に問題なければ、マージボタンを押す事によりマージができる
同じブランチで作業する場合(共同開発)
AさんとBさんのローカルリポジトリで別々のコミット履歴が出来上がる。
Aさんが先にプッシュ
次にBさんがプッシュするとエラーが発生する
プッシュの前にリモートの状態をローカルにマージしておく必要がある(下の①もしくは②の内容)
① git fetch origin/develop
※このコマンドが実行されるとVIエディタが開かれるので、「:wq」と入力しEnterキーを押すことで、マージが行われる
② git pull develop
※「pull」は「fetch+merge」を一つのコマンドにまとめたもの
コンフリクト
編集している箇所が同じで競合状態にある事
- Aさんが編集しプッシュ
- Bさんが同じ箇所を編集していてPullするとコンフリクトが発生
- コンフリクトを解消してからコミットしてプッシュする
git rebase(mergeとの違い)
- merge
コミット履歴が時系列のまま - rebase
Aさんのコミット履歴の後にBさんのコミット履歴を持ってくる(一直線のコミットツリーになる)
git fetch origin
git rebase origin/develop develop
git push origin -f
※rebaseの場合、-fが必要で強制的にプッシュする事になる
git reset と git stash
-
git reset --hard HEAD
今編集中の内容を全てリセットして、最終コミットのところまで戻す -
git stash
コミットしていない内容をいったん全て削除 -
git stash pop
内容を元に戻す
※違うブランチで作業していて、ブランチを切り替える必要がある際に使える