Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。
1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。
※前回記事のリポジトリ状態からの続きになっています。
前回記事へ | 目次へ:Git関連記事のまとめページ | 次回記事へ |
---|
実行例
(※現在の各ブランチの位置状態)
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等は不使用。