LoginSignup
0
0

[Git] 動作を試す 実行例46:--depth=1でローカルブランチに対して過去1つの履歴しか残さない

Posted at

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等は不使用。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0