作業の流れ
注釈
リモートリポジトリをGitHubに置く前提で説明します。
分散型バージョン管理システムであるGitで実際にバージョン管理を行う際の大まかな手順は以下のような作業の繰り返しとなります。
開発するプロジェクトの中心となるリポジトリをリモートサーバー等に作成する。(プロジェクト毎に初回のみ)
ステップ1で作成したリポジトリをローカル(自分のPC)に複製する。(ユーザー・PC毎に初回のみ)
ファイルの編集・追加・削除
ローカルリポジトリに変更内容を記録
リモートの変更内容をローカルに反映させる
ローカルの変更内容をリモートのリポジトリに反映させる
ローカルだけで管理する場合
これだけでも以下のようなことはできます。
コメント付きで、時系列も明確でキレイなファイルのバージョン管理
任意の時点に戻る
過去の特定の変更を打ち消す
変更履歴を分岐させて複数のバージョンの管理
他の分岐での変更を他の分岐に統合
開発するプロジェクトの中心となるリポジトリをリモートサーバー等に作成する
今回は一番最初にリモートリポジトリを作成する前提で話を進めますが、既にローカルで作業を進めているリポジトリを後からリモートリポジトリを作成して同期することもできます。
リモートリポジトリをローカル(自分のPC)に複製する
ヒント
リモートリポジトリをローカルにクローンする際にブランチを指定していなかった場合、デフォルトのブランチをチェックアウトした状態になっています。
ファイルの編集・追加・削除
ヒント
実際の開発においては作業したいブランチにチェックアウトして、作業ディレクトリのファイルの状態を最新のコミットと同じ状態にしてから作業を行います。
注釈
今回説明する流れではデフォルトブランチ main だけで作業する前提で話を進めます。
ローカルリポジトリに変更内容を記録
リモートの変更内容をローカルに反映させる
リモートの内容をローカルに反映させる理由
リモートの内容をローカルに反映させる流れ
このような場合の解決方法はAさんのローカルリポジトリのブランチ main にないコミットCをリモートリポジトリから持ってきてあげることです。
origin/main とはリモートリポジトリ(origin)のブランチ(main)を示します。main にはコミットCが含まれていません。( main の先頭からコミットを辿っていった流れの中にCがいない。)
ヒント
Gitクライアントの中には定期的に自動でフェッチを行いリモートリポジトリのコミットログを取得してくれるものもあります。
origin/main のコミットCを main に統合します。main の先頭からコミットを辿って行った際にA←B←Cという履歴が origin/main と一致しているので main の変更をリモートに反映(プッシュ )できるようになりました。
mainにコミットCとコミットXを親に持つ、「origin/mainをマージしました。」というコミットM作成され、ブランチmainの先頭はコミットMになります。
コミットBから派生していた
mainのコミットXがorigin/mainのコミットCに付け替えられます。ただしこの時付け替えられたコミットはX´という新しく作成されたコミットになっており、リベース前のXとは違うコミットであることに注意しましょう。
ローカルの変更内容をリモートのリポジトリに反映させる