2022年5月28日更新
確認バージョン:git version 2.32.0.windows
リモートリポジトリをローカルに取得、編集後リモートリポジトリを更新するまでの流れを説明します。
自分が躓いたところも含めて丁寧に解説しました。
対象の リモートリポジトリが既にあり、ローカルにはGitがインストールされていることが前提です。
〇初めにすること
下記のコマンドを実行します。Windowsの場合は任意のディレクトリで右クリック→Git bash hereを選択し表示されたコンソールで実行します。urlはgithubの場合はリポジトリのトップページに記載があります。
git clone [url]
現在の階層にリポジトリ名でフォルダが作成されリモートリポジトリの中身がローカルにコピーされます。同時にその場所がgitで管理される(.gitという設定フォルダが作成されgitコマンドが使える)ようになります。これをローカルリポジトリと呼びます。以降リモートリポジトリからの差分の取得や更新のアップの際に都度URLを打ち込まなくてもよくなりますが、それはcloneコマンド実行の際にリモートリポジトリのURLが登録されるためです。デフォルトではリモートリポジトリにoriginという名称が設定されます。
下記で設定されたリモートリポジトリの情報が確認できます。
git remote -v
〇ブランチを確認する
作成されたディレクトリ下に移動し、
cd リモートリポジトリ名
ローカルリポジトリのブランチ一覧を表示します。
git branch -a
緑色が通常のブランチ、赤色がリモート追跡ブランチです。ローカルにmasterブランチが自動的に作成されたことがわかります(リモートリポジトリで設定されているデフォルトブランチの名称で一つだけ作成されます。ここではmasterとして進めます。)。このmasterブランチは、リモートリポジトリのmasterブランチに対応するということが設定済です。pullやpushを実行する際に毎回ブランチ名を指定しなくてもよいようになっています。リポジトリ名の左にある*は現在どのブランチの状態にあるかを示しています。今*はmasterにあるので、ローカルリポジトリの状態がリモートリポジトリのmasterブランチの状態と同じであることがわかります。(ブランチの実態は枝ではなくフォルダ群のバージョンの一つを指すため状態という表現をしています。)
赤色のブランチはリモート追跡ブランチといい、ローカルにあるブランチですが、リモートリポジトリのブランチと紐づけられています。リモートから更新を取得する際はここに情報が保存されます。先ほどのmasterブランチの追跡先としてリモート追跡ブランチであるremotes/origin/masterが設定されています(追跡先のことを上流ブランチといいます)。ローカルで新たにブランチを作成すると上流ブランチがない(リモートリポジトリのどのブランチに対応するのかわからない)のでpushするとエラーになります(後述)。
〇どのブランチで作業を始めればよいか
masterブランチをリリースや本番用としている場合、masterを直接編集することは少ないと思います。ですのでmasterからブランチを切り出してからmasterにmergeする手順を説明します。
〇ブランチの切り方
ローカルとリモートどちらでもできますが、ここではgithub のWebインターフェースを使ってリモートの方で行います。
リポジトリのトップページで下図のボタンをクリックします。
テキストボックスに作成したいブランチ名を入力するとCreate branchボタンが現れます。create branch xx fromの後がmasterになっていることを確認してからクリックします。masterになっていない場合はブランチをmasterに切り替えてから行いましょう。
ブランチ一覧を表示して新しくブランチが作成できたことを確認します。
〇新しいブランチで作業するには?
ローカルに戻りfetchコマンドを打ちます。
git fetch
リモートリポジトリから差分がダウンロードされ、リモート追跡ブランチも更新されます。git branch -aで確認すると新たにリモート追跡ブランチremote/origin/new-branchができていることがわかります。
これがある状態でブランチ名をcheckoutすると、上流ブランチ設定済みのブランチが作成されます。
git checkout new-branch
new-branchが作成され現在のブランチを示す*が移動しました。この状態でファイルの編集作業を行いましょう。コミットまで完了したらリモートにpushします。
git push
このとき何かのミスで上流ブランチが設定されていないとエラーになります。ローカルで作成したブランチをpushする場合もこのようになります。
git branch -vvで上流ブランチを確認してみるとmasterには上流ブランチの記載がある(青地)のに対しnew-branchには記載がありません。
この時はpushと同時に上流ブランチを設定するコマンドを実行します。下記でoriginの部分は設定されているリモートブランチの名称に置き換えてください。
git push -u origin new-branch
次回以降は”git push”とするだけで実行できます。
githubでソースコードに反映されたことを確認しましょう。
〇masterに反映させるには?
変更をmaster(本番データ)に反映させるにはプルリクエストを行います。pullというコマンドはfetchとmergeを同時に行うものです。プルリクエストはあるブランチに対して、別のブランチをpullするように要求することです。今回のプルリクエストはmasterに対してnew-branchをmergeする(差分を取り込む)よう要求します。プルリクエストは作成と実行の二段階になっており、実行してから反映されます。
下図のようにプル先にmaster、プル元にnew-branchに設定してCreate Pull Requestをクリックします。
プルリクエストを作成後、コンフリクトがなければMergeが実行できる状態になります。Merge pull requestをクリックすると完了です。
○ブランチの作成からやり直したい場合
失敗などしてブランチを作り直したい場合、対象のブランチを完全に削除してから作り直す必要があります。まずgithubでリモートリポジトリのブランチ一覧から削除を実行します。次にリモートリポジトリの情報をローカルに取得しなおします。
git fetch --prune
fetchに–pruneオプションを付けることで、ブランチが削除された情報を取得するのでリモート追跡ブランチも消えます。ただリモート追跡ブランチをcheckoutして作成されたnew-branchブランチは削除されないので手動で削除する必要があります。
git branch -d new-branch
git branch -a で削除されたことを確認したら再度checkoutしましょう。
git checkout new-branch
以上です。 参考になれば幸いです。