今回は、次のような場合を考えます。
リポジトリ | masterブランチ | developブランチ | develop2ブランチ |
---|---|---|---|
フォーク元 | ○ | ○ | ○ |
フォークしたリモートリポジトリ (自分のリモートリポジトリ) |
○ | ○ | × |
ローカルリポジトリ | ○ | ○ | × |
上記のような感じです。
つまり、一度フォークした後に、フォーク元にdevelop2ブランチが作成されたとき、
これを自分のリモートリポジトリにも反映させたいなぁ。
というときの手順です。
まずはブランチの状態を確認するため以下のコマンドを実行します。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (develop)
$ git branch -a
* develop
master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
実行結果を見るとローカル側とリモート側にdevelopブランチ、masterブランチがあることが確認できました。
ちなみにこの場合のoriginとは以下のとおりフォークしたリポジトリを指します。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (develop)
$ git remote -v
origin http://localhost:8888/user01/prj3.git (fetch)
origin http://localhost:8888/user01/prj3.git (push)
つまり、git branch -a
の結果ではdevelop2ブランチの存在を確認できない状態になっています。
なぜかというと、フォークしたリモートリポジトリにもdevelop2ブランチが存在しないためです。
カレントディレクトリとフォーク元のリポジトリを関連付けるには以下のコマンドを実行します。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (develop)
$ git remote add fork_moto http://localhost:8888/group1/prj3.git
実行したコマンドの形式は次のとおりです。
git remote add ブランチ名 フォーク元ブランチのURL
上のコマンドを実行したらgit remote
で再度確認します。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (develop)
$ git remote -v
fork_moto http://localhost:8888/group1/prj3.git (fetch)
fork_moto http://localhost:8888/group1/prj3.git (push)
origin http://localhost:8888/user01/prj3.git (fetch)
origin http://localhost:8888/user01/prj3.git (push)
これでフォーク元のリポジトリを追加することが出来ました。
次に、フォーク元リポジトリの履歴情報を取得します。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (develop)
$ git fetch fork_moto
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From http://localhost:8888/group1/prj3
* [new branch] develop -> fork_moto/develop
* [new branch] develop2 -> fork_moto/develop2
* [new branch] master -> fork_moto/master
これで以下のとおりフォーク元のブランチが確認できようになりました。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (develop)
$ git branch -a
* develop
master
remotes/fork_moto/develop
remotes/fork_moto/develop2
remotes/fork_moto/master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
以下のコマンドでフォーク元のdevelop2ブランチをローカルリポジトリ内で作成します。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (develop)
$ git checkout -b moto_develop2 fork_moto/develop2
Switched to a new branch 'moto_develop2'
Branch 'moto_develop2' set up to track remote branch 'develop2' from 'fork_moto'.
実行したコマンドの形式は次のとおりです。
git checkout -b ローカルブランチ名 フォーク元リポジトリ名/フォーク元ブランチ名
次のコマンドで作成されたかを確認します。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (moto_develop2)
$ git branch -a
develop
master
* moto_develop2
remotes/fork_moto/develop
remotes/fork_moto/develop2
remotes/fork_moto/master
remotes/origin/HEAD -> origin/master
remotes/origin/develop
remotes/origin/master
はい、これで作成されました。
手順1~3で自分のリモートリポジトリには存在せず、フォーク元のみに存在したブランチをローカルへ持ってくることに成功しました。
表でいうと以下のとおりです。
リポジトリ | masterブランチ | developブランチ | develop2ブランチ |
---|---|---|---|
フォーク元 | ○ | ○ | ○ |
フォークしたリモートリポジトリ (自分のリモートリポジトリ) |
○ | ○ | × |
ローカルリポジトリ | ○ | ○ | ○ |
後はこれを自分のリモートリポジトリに反映するだけです。
XXXXX@DESKTOP-AQBVPOG MINGW64 /c/workspace2/prj3 (moto_develop2)
$ git push origin moto_develop2
Counting objects: 3, done.
Writing objects: 100% (3/3), 270 bytes | 270.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for moto_develop2, visit:
remote: http://localhost/user01/prj3/merge_requests/new?merge_request%5Bsource_branch%5D=moto_develop2
remote:
To http://localhost:8888/user01/prj3.git
* [new branch] moto_develop2 -> moto_develop2
これで完了です。
以上で記事の解説はお終い!
もっとGitを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!