概要
- gitの動作をまとめた図はよくある
- gitのリモート追跡ブランチをまとめた図もよくある
- 両方をあわせてまとめた図は全然なかったので、勉強もかねて作った
背景
gitの動作をまとめた図はよくある。
“git workflow (cheat sheet)“とかでぐぐると素晴らしいのが出てくる
引用元: https://sentheon.com/blog/git-cheat-sheet.html
gitのリモート追跡ブランチをまとめた図もよくある
引用元: https://sentheon.com/blog/git-cheat-sheet.html
そこで…
ただ両方合わせて、ローカルリポジトリの中まで書いたフローは全然なかったのでまとめてみた。
間違ってるかもしれません😂
各動き
前提としてブランチはmaster、リモートリポジトリはorigin
- addでどのファイル、フォルダをcommitするか選択
- commitでリポジトリに変更、追加内容を記録
- このとき記録先は、ローカルレポジトリの中のローカルブランチ(いわゆるmaster)
- commit -a でaddもまとめて行ってる
- pushでローカルリポジトリの記録内容をリモートリポジトリoriginの中のmasterブランチに反映する
- (デフォの場合で、ブランチとかを指定することも可能)
- fetchはリモートリポジトリのmasterブランチの内容をローカルレポジトリに反映する
- ただしこのときローカルリポジトリの中のリモート追跡ブランチ(いわゆるorigin/master)で反映を留めてる
- リモート追跡ブランチではリモートリポジトリの反映を記録している
mergeでリモート追跡ブランチに反映された内容を、ローカルにも反映さえる(ローカルブランチ、index、ワークスペースに全部)
pull はfetchとmergeを同時に行っている
補足
- pushではローカルブランチの内容をリモート追跡ブランチにも反映させている?(これがわからなかった)
fetchをしたとき
- ローカル側で別の修正をしててcommitしている場合、ローカルブランチとリモート追跡ブランチ(= masterとorigin/master)の内容に齟齬が生じる
- 逆に言えば事前に競合を防げる。これがローカルリポジトリの中にローカルブランチとリモート追跡ブランチが別れている理由なのだと思った。
- git status で調べると教えてくれる
On branch master Your branch and 'origin/master' have diverged, and have 1 and 1 different commits each, respectively. (use "git pull" to merge the remote branch into yours)
- ここでmergeをしたり、pullをすると無理やり統合される。強制合成。リモート側の変更とローカル側の変更がタブルでファイルに反映さえる。
- その状態でまたファイルを修正(問題なければしなくてよい)後、add, commitするとstatusではクリーンになる。
- mergeが嫌なら新規ブランチを作ってそっちに逃げる、ローカルのコミットを破棄するなど
- とにかくfetchとリモート追跡ブランチのお蔭で競合への選択肢が増える。重要。そしてpull危ない