[Git] 動作を試す 実行例48：リモートとローカルで別名のブランチを指定してfetch/push

Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。

1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。

※前回記事のリポジトリ状態からの続きになっています。
| [前回記事へ](https://qiita.com/dl_from_scratch/items/97027797cef50dbfbe5c) | [目次へ：Git関連記事のまとめページ](https://qiita.com/dl_from_scratch/items/597bc28a4787a7901d21) | [次回記事へ](https://qiita.com/dl_from_scratch/items/a4fc0b27b5ef2abd3fe1) |
|:-:|:-:|:-:|

# 実行例

```
(※試行用にlocal-repo3を作成)

cd /test-space
mkdir local-repo3
cd /test-space/local-repo3

git init
git remote add origin "D:/test-space/remote-repo1.git"

git log
↓
結果: 
fatal: your current branch 'master' does not have any commits yet

-----

※リモートとローカルで別名のブランチを指定してブランチを更新
※git fetch [リモートリポジトリ名] [リモートブランチ]:[ローカルブランチ]
git fetch origin master:master-A1
↓
結果: 
remote: Enumerating objects: 21, done.
remote: Counting objects: 100% (21/21), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 21 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (21/21), 1.53 KiB | 1024 bytes/s, done.
From D:/test-space/remote-repo1
 * [new branch]      master     -> master-A1
 * [new branch]      master     -> origin/master

git log --oneline --graph --all
↓
結果: 
* fab68d8 (origin/master, master-A1) message R3
* c69a305 message R1
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※リモートとローカルで別名のブランチが作成されている: origin/master, master-A1)

git checkout master
↓
結果: 
Already on 'master'
branch 'master' set up to track 'origin/master'.

git log --oneline --graph --all
↓
結果: 
* fab68d8 (HEAD -> master, origin/master, master-A1) message R3
* c69a305 message R1
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※masterをチェックアウトすると、ローカルブランチのmasterが再度新規に作成される)

-----

(※masterブランチに居ながら、別のブランチに対して、リモートとローカルで別名のブランチを指定してfetch取得更新)

git fetch origin branch-R1:branch-R111
↓
結果: 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 270 bytes | 2.00 KiB/s, done.
From D:/test-space/remote-repo1
 * [new branch]      branch-R1  -> branch-R111
 * [new branch]      branch-R1  -> origin/branch-R1

git log --oneline --graph --all
↓
結果: 
* fab68d8 (HEAD -> master, origin/master, master-A1) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R111) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

-----

(※適当に変更を追加)
git checkout master-A1
echo Sample-Added-R4 >> test1.txt
git commit -a -m "message R4"

git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master-A1) message R4
* fab68d8 (origin/master, master) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R111) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

※リモートとローカルで別名のブランチを指定してリモートリポジトリへpush送信する
※git push [リモートリポジトリ名] [ローカルブランチ]:[リモートブランチ]
git push origin master-A1:master
↓
結果: 
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 331 bytes | 331.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
To D:/test-space/remote-repo1.git
   fab68d8..1247fa9  master-A1 -> master

git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master-A1, origin/master) message R4
* fab68d8 (master) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R111) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※master-A1ブランチを指定してリモートリポジトリのmasterが更新されている)

-----

(※新規にbranch-R2ブランチを作成して、別のmaster-A1ブランチに居ながら、branch-R2を別名のブランチでリモートリポジトリへpush送信する)

git branch branch-R2 00cad71
git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master-A1, origin/master) message R4
* fab68d8 (master) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R111) message R2
|/
* 20bbab7 message3
* 00cad71 (branch-R2) message2
* 4ace194 message1

git push origin branch-R2:branch-R222
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To D:/test-space/remote-repo1.git
 * [new branch]      branch-R2 -> branch-R222

git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master-A1, origin/master) message R4
* fab68d8 (master) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R111) message R2
|/
* 20bbab7 message3
* 00cad71 (origin/branch-R222, branch-R2) message2
* 4ace194 message1

(※別のmaster-A1ブランチに居ながら、branch-R2が別名のブランチ名でリモートリポジトリへpush送信されている)

(※位置を進める)
git branch -f branch-R2 e009b2d
git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master-A1, origin/master) message R4
* fab68d8 (master) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R1, branch-R2, branch-R111) message R2
|/
* 20bbab7 message3
* 00cad71 (origin/branch-R222) message2
* 4ace194 message1

git push origin branch-R2:branch-R222
↓
結果: 
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To D:/test-space/remote-repo1.git
   00cad71..e009b2d  branch-R2 -> branch-R222

git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master-A1, origin/master) message R4
* fab68d8 (master) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (origin/branch-R222, origin/branch-R1, branch-R2, branch-R111) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※別のmaster-A1ブランチに居ながら、branch-R2が別名のブランチ名でリモートリポジトリへpush送信されている)

cd /test-space/remote-repo1.git
git log --oneline --graph --all
↓
結果: 
* 1247fa9 (HEAD -> master) message R4
* fab68d8 (branch-R2) message R3
* c69a305 message R1
* 94996a0 message4
| * e009b2d (branch-R222, branch-R1) message R2
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

-----

(※pushしたブランチを削除して元に戻す)
cd /test-space/local-repo3
git push --delete origin branch-R222

-----

(※local-repo3を削除)
cd /test-space
rd /s /q "/test-space/local-repo3"
```

# 環境

Windows 10、PortableGit-2.40.0-64-bitを使用、全てローカルPC上で実施、GitHub等は不使用。