gitのcommit, fetch とかの基本動作を図でまとめた(追跡ブランチも)

概要

  • gitの動作をまとめた図はよくある
  • gitのリモート追跡ブランチをまとめた図もよくある
  • 両方をあわせてまとめた図は全然なかったので、勉強もかねて作った

背景

gitの動作をまとめた図はよくある。 “git workflow (cheat sheet)“とかでぐぐると素晴らしいのが出てくる This is a image 引用元: https://sentheon.com/blog/git-cheat-sheet.html

gitのリモート追跡ブランチをまとめた図もよくある This is a image 引用元: https://sentheon.com/blog/git-cheat-sheet.html

そこで…

ただ両方合わせて、ローカルリポジトリの中まで書いたフローは全然なかったのでまとめてみた。 間違ってるかもしれません😂 This is a image

各動き

前提としてブランチは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危ない

Contents