[Git] 動作を試す 実行例40：remoteでリモートリポジトリを利用(外部とのやり取り)

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

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

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

# 実行例

```
(※現在の各ブランチの位置状態)
git branch -v
↓
結果: 
  branch1 2b19eaa Merge branch 'master' into branch1
* branch2 f3ef64d message12
  branch3 8133746 message15
  master  8133746 message15

(※ブランチ作成前の始めの状態に戻す)
git checkout master
git reset --hard 94996a0
git log --oneline
↓
結果: 
94996a0 (HEAD -> master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

-----

cd /test-space
mkdir remote-repo1.git
cd /test-space/remote-repo1.git

※新たに空のベアリポジトリを作成する (checkoutした作業ファイル等はなしで共有専用のリポジトリ)
git init --bare --shared
↓
結果: 
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint:   git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint:   git branch -m <name>
Initialized empty shared Git repository in D:/test-space/remote-repo1.git/

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

-----

(※リモートリポジトリへpush送信)

cd /test-space/local-repo1

※リモートGitリポジトリを追加する
git remote add origin D:/test-space/remote-repo1.git

(※絶対パスが無難、相対パスで指定するとD:/.../PortableGitからのパスとなる)

※リモートGitリポジトリの追加状況を確認
git remote -v
↓
結果: 
origin  D:/test-space/remote-repo1.git (fetch)
origin  D:/test-space/remote-repo1.git (push)

git fetch origin
↓
結果: 
(なし)

git log --oneline
↓
結果: 
94996a0 (HEAD -> master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

※リモートGitリポジトリへmasterブランチの情報を送信
git push origin master
↓
結果: 
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (15/15), 1.04 KiB | 1.04 MiB/s, done.
Total 15 (delta 1), reused 11 (delta 0), pack-reused 0
To D:/test-space/remote-repo1.git
 * [new branch]      master -> master

git log --oneline
↓
結果: 
94996a0 (HEAD -> master, origin/master) message4
20bbab7 message3
00cad71 message2
4ace194 message1

-----

(※リモートリポジトリを直接調べると)

cd /test-space/remote-repo1.git

※--all付きで履歴全てを表示
git log --oneline --graph --all
↓
結果: 
* 94996a0 (HEAD -> master) message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

git branch -a -v
↓
結果: 
* master 94996a0 message4

(※送信されたmasterブランチのみがある)

-----

(※別の新規リポジトリを作成・クローンして、リモートリポジトリから情報を取る試行)

cd /test-space

※新規リポジトリを作成・クローン
※リモートリポジトリをローカル側のディレクトリに置いたもの、Localプロトコルでクローン
git clone D:/test-space/remote-repo1.git local-repo2
↓
Cloning into 'local-repo2'...
done.

(※絶対パスが無難、相対パスで指定するとD:/.../PortableGitからのパスとなる)

dir /b
↓
結果: 
local-repo1
local-repo2
remote-repo1.git

cd /test-space/local-repo2

※--all付きで履歴全てを表示
git log --oneline --graph --all
↓
結果: 
* 94996a0 (HEAD -> master, origin/master, origin/HEAD) message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※local-repo1、remote-repo1のmasterブランチ内容と同じものとなっている)

※Pro Git本 引用: originという名前は、クローン元のサーバーに対してGitがデフォルトでつける名前。

※リモートGitリポジトリの追加状況を確認
git remote -v
↓
結果: 
origin  D:/test-space/remote-repo1.git (fetch)
origin  D:/test-space/remote-repo1.git (push)

dir /b
↓
結果: 
test1.txt
test2.txt
test4.txt

type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14

-----

(※local-repo1にあるその他の未送信のコミットはlocal-repo2には存在しない)

git show 8133746
↓
結果: 
fatal: ambiguous argument '8133746': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

git show 2b19eaa
↓
結果: 
fatal: ambiguous argument '2b19eaa': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

git show d10f934
↓
結果: 
fatal: ambiguous argument 'd10f934': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

-----

(※コミットを追加してpush送信・更新されたコミットをfetch取得)

※local-repo1へ切り替え
cd /test-space/local-repo1

echo Sample-Added-R1 >> test1.txt
git commit -a -m "message R1"

※リモートGitリポジトリへmasterブランチの情報を送信
git push origin 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
   94996a0..c69a305  master -> master

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

※local-repo2へ切り替え
cd /test-space/local-repo2

※自分のリポジトリにまだ存在しないものをすべて取得
git fetch origin
↓
結果: 
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 311 bytes | 2.00 KiB/s, done.
From D:/test-space/remote-repo1
   94996a0..c69a305  master     -> origin/master

※--all付きで履歴全てを表示
git log --oneline --graph --all
↓
結果: 
* c69a305 (origin/master, origin/HEAD) message R1
* 94996a0 (HEAD -> master) message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

(※local-repo1、remote-repo1のmasterブランチ内容と同じものとなっている)

type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14

※ローカルブランチmasterをリモートブランチorigin/masterまで進める
git merge origin/master
↓
結果: 
Updating 94996a0..c69a305
Fast-forward
 test1.txt | 1 +
 1 file changed, 1 insertion(+)

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

type test1.txt
↓
結果: 
Sample-Added-11
Sample-Added-12
Sample-Added-13
Sample-Added-14
Sample-Added-R1

(※ファイル内容が更新されている)

-----

(※新規にブランチを作成してpush送信すると)

(※例えば、2つ履歴を戻ってブランチを作成して、新規ブランチをpush送信)
git reset --hard HEAD~2
git checkout -b branch-R1
↓
結果: 
HEAD is now at 20bbab7 message3
Switched to a new branch 'branch-R1'

echo Sample-Added-R2 >> test1.txt
git commit -a -m "message R2"

※--all付きで履歴全てを表示
git log --oneline --graph --all
↓
結果: 
* e009b2d (HEAD -> branch-R1) message R2
| * c69a305 (origin/master, origin/HEAD) message R1
| * 94996a0 message4
|/
* 20bbab7 (master) message3
* 00cad71 message2
* 4ace194 message1

git branch -a -v
↓
結果: 
* branch-R1             e009b2d message R2
  master                20bbab7 [behind 2] message3
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master c69a305 message R1

※リモートGitリポジトリへ新規ブランチbranch-R1の情報を送信
git push origin branch-R1
↓
結果: 
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), 290 bytes | 290.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To D:/test-space/remote-repo1.git
 * [new branch]      branch-R1 -> branch-R1

※--all付きで履歴全てを表示
git log --oneline --graph --all
↓
結果: 
* e009b2d (HEAD -> branch-R1, origin/branch-R1) message R2
| * c69a305 (origin/master, origin/HEAD) message R1
| * 94996a0 message4
|/
* 20bbab7 (master) message3
* 00cad71 message2
* 4ace194 message1

(※リモートリポジトリを直接調べると)

cd /test-space/remote-repo1.git

※--all付きで履歴全てを表示
git log --oneline --graph --all
↓
結果: 
* e009b2d (branch-R1) message R2
| * c69a305 (HEAD -> master) message R1
| * 94996a0 message4
|/
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1

git branch -a -v
↓
結果: 
  branch-R1 e009b2d message R2
* master    c69a305 message R1

(※リモートリポジトリにブランチが追加反映される)

-----

※local-repo2へ切り替え
cd /test-space/local-repo2

git checkout master
↓
結果: 
Switched to branch 'master'
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

※リモートGitリポジトリへ(resetして後進させた)masterブランチの情報を送信
git push origin master
↓
結果: 
To D:/test-space/remote-repo1.git
 ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'D:/test-space/remote-repo1.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.

(※拒否される。リモートリポジトリの更新分をまず取り入れるように催促される)

(※リモートリポジトリの更新分を取り入れると)
git fetch origin master
↓
結果: 
From D:/test-space/remote-repo1
 * branch            master     -> FETCH_HEAD

※ブランチの更新状況
git branch -a -vv
↓
結果: 
  branch-R1                e009b2d message R2
* master                   20bbab7 [origin/master: behind 2] message3
  remotes/origin/HEAD      -> origin/master
  remotes/origin/branch-R1 e009b2d message R2
  remotes/origin/master    c69a305 message R1

git merge origin/master
↓
結果: 
Updating 20bbab7..c69a305
Fast-forward
 test1.txt | 2 ++
 test4.txt | 1 +
 2 files changed, 3 insertions(+)
 create mode 100644 test4.txt

(※再試行)
git push origin master
↓
結果: 
Everything up-to-date

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

# 環境

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