Gitコマンド入門::clone(fetch,pull,push,最終回)「第四十九回」
みなさんこんにちは! 今日は、先日に引き続き、ローカルブランチ、リモートブランチをマージしながら、さらにブランチ整理整頓してみたいと思います。そして、clone 関連は、今回で、一応、最終回として置きますね。
前回の記事はこちらから!
git本家本元の情報はこちらから!
git branch -avv 前回の環境を使いまわしま~す!
$ git branch -avv
main 1bd77d3 [origin/main] 1st
* temp_1 37607ba [origin/temp_1: ahead 2] merge
temp_2 1bd77d3 [origin/temp_1] 1st
remotes/Rep0045/main 3abef4b 1st
remotes/Rep0045/temp 3abef4b 1st
remotes/Rep0045/temp_1 3abef4b 1st
remotes/origin/main 1bd77d3 1st
remotes/origin/temp_1 1bd77d3 1st
$ git remote -v
Rep0045 https://github.com/shiozumi-makoto/20210316.git (fetch)
Rep0045 https://github.com/shiozumi-makoto/20210316.git (push)
origin https://github.com/shiozumi-makoto/20210316_2.git (fetch)
origin https://github.com/shiozumi-makoto/20210316_2.git (push)
前回は、Rep0045 リポジトリーのリモートtemp_1ブランチと、ローカルのtemp_1を、マージしまいたね。temp_1の最新コミットのハッシュ値は、37607ba となりました。又、先祖の異なるブランチ同士を、--allow-unrelated-histories のオプションスイッチを付けて、強制的にマージしましたね。
origin = https://github.com/shiozumi-makoto/20210316_2.git
Rep0045 = https://github.com/shiozumi-makoto/20210316.git
それぞれのエイリアス設定は、GitHubのリモートリポジトリのアドレスが登録されてます。
git log temp_1 --oneline --graph
$ git log temp_1 --oneline --graph
* 37607ba (HEAD -> temp_1) merge
|\
| * 3abef4b (Rep0045/temp_1, Rep0045/temp, Rep0045/main) 1st
* 1bd77d3 (origin/temp_1, origin/main, temp_2, main) 1st
ということで、まずは、さっそく、temp_1 を、push してみましょう!
gitコマンドは、git push origin temp_1:temp_1
省略なしのフルコマンドで!
git push origin temp_1:temp_1
$ git push origin temp_1:temp_1
// 中略~
To https://github.com/shiozumi-makoto/20210316_2.git
1bd77d3..37607ba temp_1 -> temp_1
$ git branch -avv
main 1bd77d3 [origin/main] 1st
* temp_1 37607ba [origin/temp_1] merge
temp_2 1bd77d3 [origin/temp_1: behind 2] 1st
remotes/Rep0045/main 3abef4b 1st
remotes/Rep0045/temp 3abef4b 1st
remotes/Rep0045/temp_1 3abef4b 1st
remotes/origin/main 1bd77d3 1st
remotes/origin/temp_1 37607ba merge // <!-- temp_1 と同じハッシュ値!!!
次は、Rep0045 の temp_1 に push してみましょう!
gitコマンドは、git push Rep0045 temp_1:temp_1
省略なしのフルコマンドで!
git push Rep0045 temp_1:temp_1
$ git push Rep0045 temp_1:temp_1
// 中略~
To https://github.com/shiozumi-makoto/20210316.git
1bd77d3..37607ba temp_1 -> temp_1
$ git branch -avv
main 1bd77d3 [origin/main] 1st
* temp_1 37607ba [origin/temp_1] merge
temp_2 1bd77d3 [origin/temp_1: behind 2] 1st
remotes/Rep0045/main 3abef4b 1st
remotes/Rep0045/temp 3abef4b 1st
remotes/Rep0045/temp_1 37607ba merge // <!-- temp_1 と同じハッシュ値!!!
remotes/origin/main 1bd77d3 1st
remotes/origin/temp_1 37607ba merge // <!-- temp_1 更新済
これで、Rep0045リポジトリのリモートtemp_1ブランチも更新されました!
次は、Rep0045 の main に push してみましょう!
gitコマンドは、git push Rep0045 temp_1:main
省略なしのフルコマンドで!
$ git push Rep0045 temp_1:main
// 中略~
To https://github.com/shiozumi-makoto/20210316.git
3abef4b..37607ba temp_1 -> main
$ git branch -avv
main 1bd77d3 [origin/main] 1st
* temp_1 37607ba [origin/temp_1] merge
temp_2 1bd77d3 [origin/temp_1: behind 2] 1st
remotes/Rep0045/main 37607ba merge // <!-- temp_1 と同じハッシュ値!!!
remotes/Rep0045/temp 3abef4b 1st
remotes/Rep0045/temp_1 37607ba merge // <!-- temp_1 更新済
remotes/origin/main 1bd77d3 1st
remotes/origin/temp_1 37607ba merge // <!-- temp_1 更新済
これで、Rep0045リポジトリのリモートmainブランチも更新されました!
次は、origin の main に push してみましょう!
gitコマンドは、git push origin temp_1:main
省略なしのフルコマンドで!
$ git push origin temp_1:main
// 中略~
To https://github.com/shiozumi-makoto/20210316_2.git
1bd77d3..37607ba temp_1 -> main
$ git branch -avv
main 1bd77d3 [origin/main: behind 2] 1st
* temp_1 37607ba [origin/temp_1] merge
temp_2 1bd77d3 [origin/temp_1: behind 2] 1st
remotes/Rep0045/main 37607ba merge // <!-- temp_1 更新済
remotes/Rep0045/temp 3abef4b 1st
remotes/Rep0045/temp_1 37607ba merge // <!-- temp_1 更新済
remotes/origin/main 37607ba merge // <!-- temp_1 と同じハッシュ値!!!
remotes/origin/temp_1 37607ba merge // <!-- temp_1 更新済
これで、originリポジトリのリモートmainブランチも更新されました!
次は、ローカルmainブランチを、origin の main に push してみましょう!
gitコマンドは、git push origin main:main
省略なしのフルコマンドで!
$ git push origin main:main
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/shiozumi-makoto/20210316_2.git'
hint: Updates were rejected because a pushed branch tip is behind its remote
hint: counterpart. Check out this branch and integrate the remote changes
hint: (e.g. 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
はい! しっかりエラーになりましたね。先ほど、ロカールtemp_1ブランチを、origin main に、push しましたから、[origin/main: behind 2] となり、基本、先祖返りは出来ません。
ということで、ローカルmainブランチに、リモートリポジトリoriginのリモートmainブランチから、 pull してみましょう!
gitコマンドは、git pull origin main:main
省略なしのフルコマンドで!
git pull origin main:main
git switch main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
git pull origin main:main
From https://github.com/shiozumi-makoto/20210316_2
* branch main -> FETCH_HEAD
Updating 1bd77d3..37607ba
Fast-forward
$ git branch -avv
* main 37607ba [origin/main] merge <!-- behind 2が消えました!
temp_1 37607ba [origin/temp_1] merge
temp_2 1bd77d3 [origin/temp_1: behind 2] 1st
remotes/Rep0045/main 37607ba merge
remotes/Rep0045/temp 3abef4b 1st
remotes/Rep0045/temp_1 37607ba merge
remotes/origin/main 37607ba merge
remotes/origin/temp_1 37607ba merge
これで無事に、ローカルmainブランチも、マージできましたね。
尚、git pull origin main:main
のフルコマンドは、origin main の部分が、リモートリポジトリoriginのリモートリmainブランチを指していて、:main は、ローカルmainブランチとなります。従って、:main を、:temp_3 などに設定すると、新しくローカルtemp_3ブランチを作成してくれますよ!
では、最後に大掃除!(笑)
まずは、Rep0045 のリモートブランチを削除してします!
git push Rep0045 :main :temp :temp_1
To https://github.com/shiozumi-makoto/20210316.git
- [deleted] temp
- [deleted] temp_1
! [remote rejected] main (refusing to delete the current branch: refs/heads/main)
error: failed to push some refs to 'https://github.com/shiozumi-makoto/20210316.git'
さすがに、mainは消去できませんでしたね。(苦笑)
ということで、のこりは、origin temp_1 を削除!
git push origin :temp_1
Username for 'https://github.com': shiozumi-makoto
Password for 'https://shiozumi-makoto@github.com':
To https://github.com/shiozumi-makoto/20210316_2.git
- [deleted] temp_1
そして、次は、Rep0045 のエイリアス解除します!
git remote remove Rep0045
$ git remote remove Rep0045
$ git remote -v
origin https://github.com/shiozumi-makoto/20210316_2.git (fetch)
origin https://github.com/shiozumi-makoto/20210316_2.git (push)
$ git branch -avv
* main 37607ba [origin/main] merge
temp_1 37607ba [origin/temp_1: gone] merge
temp_2 1bd77d3 [origin/temp_1: gone] 1st
remotes/origin/main 37607ba merge
これで、後は、gone となっているローカルtemp_1,temp_2ブランチを削除して完了!
git branch -D temp_1 temp_2
$ git branch -D temp_1 temp_2
Deleted branch temp_1 (was 37607ba).
Deleted branch temp_2 (was 1bd77d3).
$ git branch -avv
* main 37607ba [origin/main] merge
remotes/origin/main 37607ba merge
さあ、ここまで、いかがでしょうか? こういった、ちょっと勇気のいるコマンドは、適当なテスト用のリポジトリを作成して、そこでいろいろ試すぐらいなら、いくらでもできますけど、いざ、本番になると、、、結構、緊張するものです。とはとはいうものの、複数人数で開発することになると思いますので、マメに、git pull しているならば、だれかのパソコンには、最新のリポジトリも残っていると思いますよ~(笑)
それでは、今回はここまで、お疲れ様でした!
Discussion