Gitの動作を理解するために、Gitのコマンドを実際に試して、結果を見てみました。
1つの記事内で一連のGitコマンドが完結しているので、これら一連のコマンドを順に実行させて結果を見ることで、一連のGitの動作を実際に体感でき、一通り独習することが可能です。
※前回記事のリポジトリ状態からの続きになっています。
前回記事へ | 目次へ:Git関連記事のまとめページ | 次回記事へ |
---|
実行例
※ローカルブランチに対して、過去1つだけの履歴しか残さない場合
※git fetch <remote>部分を . にするとローカルをリモートとして設定
※例: git fetch --depth=1 . master
-----
(※試行用に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 origin master
git checkout master
git log --oneline --graph --all
↓
結果:
* fab68d8 (HEAD -> master, origin/master) message R3
* c69a305 message R1
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
-----
※ローカルブランチを履歴短縮化
git fetch --depth=1 . master
↓
結果:
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
From .
* branch master -> FETCH_HEAD
git log --oneline --graph --all
↓
結果:
* fab68d8 (grafted, HEAD -> master, origin/master) message R3
-----
git show c69a305 --oneline -s
↓
結果:
c69a305 message R1
※まずこれまでの操作履歴が入ったreflogを削除
git reflog expire --expire=now --all
※リポジトリから全てのアクセスできないコミットを削除
git gc --aggressive --prune=now
↓
結果:
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% (5/5), done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
git show c69a305 --oneline -s
↓
結果:
fatal: ambiguous argument 'c69a305': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
(※アクセスできない履歴が削除され、grafted以前の過去の履歴へアクセス不可となる)
-----
(※短縮化したものをもう一度長く設定すると、取得先が無いので、長さは戻らない)
git fetch --depth=100 . master
↓
結果:
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
From .
* branch master -> FETCH_HEAD
git log --oneline --graph --all
↓
結果:
* fab68d8 (grafted, HEAD -> master, origin/master) message R3
(※originのリモートリポジトリから取得して、もう一度長く設定する)
git fetch --depth=100 origin master
↓
結果:
remote: Enumerating objects: 19, done.
remote: Counting objects: 100% (19/19), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 16 (delta 3), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (16/16), 1.25 KiB | 3.00 KiB/s, done.
From D:/test-space/remote-repo1
* branch master -> FETCH_HEAD
git log --oneline --graph --all
↓
結果:
* fab68d8 (HEAD -> master, origin/master) message R3
* c69a305 message R1
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
-----
(※どのリモートリポジトリに接続していない場合も履歴短縮化は可能)
(※どのリモートリポジトリにも接続していない状態を作ると)
git remote remove origin
git log --oneline --graph --all
↓
結果:
* fab68d8 (HEAD -> master) message R3
* c69a305 message R1
* 94996a0 message4
* 20bbab7 message3
* 00cad71 message2
* 4ace194 message1
※(リモートリポジトリと接続無しの)ローカルブランチを履歴短縮化
git fetch --depth=1 . master
↓
結果:
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
From .
* branch master -> FETCH_HEAD
git log --oneline --graph --all
↓
結果:
* fab68d8 (grafted, HEAD -> master) message R3
-----
git show c69a305 --oneline -s
↓
結果:
c69a305 message R1
※まずこれまでの操作履歴が入ったreflogを削除
git reflog expire --expire=now --all
※リポジトリから全てのアクセスできないコミットを削除
git gc --aggressive --prune=now
↓
結果:
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% (5/5), done.
Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
git show c69a305 --oneline -s
↓
結果:
fatal: ambiguous argument 'c69a305': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
(※リモートリポジトリに履歴をpush送信していない場合は、grafted以前の履歴データが完全に失われることになる)
-----
(※local-repo3を削除)
cd /test-space
rd /s /q "/test-space/local-repo3"
環境
Windows 10、PortableGit-2.40.0-64-bitを使用、全てローカルPC上で実施、GitHub等は不使用。