3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Git] ローカルリポジトリの(古い長い)過去履歴を削除する (git fetch --depthで短く取得してgit gcで削除)

Last updated at Posted at 2023-03-29

はじめに

Gitの環境を導入してGitHubにpushするまでの手順は、一通り終わっている状態から、始めます。

一からGitの環境を導入してGitHubにpushするまでの手順は、下記参照:

Git for Windowsを使用:

Google Colaboratoryを使用:

ローカルリポジトリを準備

(下記のコマンドは、Colab上で試行)

%%bash
# ローカルのリポジトリを作成
git init

# (例えば、古い長い)過去履歴のあるリモートリポジトリ(GitHub)に接続
git remote add origin "https://github.com/DL-from-Scratch/test1"
# https://{USER}:{ACCESS_TOKEN}@github.com/{REPOSITORY}.git
git remote set-url origin "https://DL-from-Scratch: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@github.com/DL-from-Scratch/test1.git"

# (例えば、古い長い)過去履歴のあるリモートブランチの内容を取得
git fetch origin master

ローカルリポジトリに(リモートリポジトリから取得した古い長い)過去履歴がある状態。

ローカルリポジトリの(古い長い)過去履歴を削除する

# 確認
!git branch -a -v
!git log --oneline --graph --all
出力
* master                311e71e test1 in test1000
  remotes/origin/master 311e71e test2 in test1000

* 311e71e (HEAD -> master, origin/master) test1000
* df46e6d test999
* 10d6e72 test998
...(略)...
* ed03349 test3
* cddbc7f test2
* e2607a2 test1

↓ ここで、履歴の長さを2個に絞って取得するように変更

# ここで、履歴の長さを2個に絞って取得するように変更
!git fetch --depth=2 origin master
出力
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
From https://github.com/DL-from-Scratch/test1
 * branch            master     -> FETCH_HEAD
# 確認
!git branch -a -v
!git log --oneline --graph --all
出力
* master                311e71e test1000
  remotes/origin/master 311e71e test1000

* 311e71e (HEAD -> master, origin/master) test1000
* df46e6d (grafted) test999

過去履歴が直近の2個だけになった状態。

# まだアクセス可能
!git show --stat --oneline 10d6e72
出力
10d6e72 test998
 test1.txt | 3 +++
 1 files changed, 3 insertions(+)
# まだアクセス可能
!git show --stat --oneline e2607a2
出力
e2607a2 test1
 test1.txt | 3 +++
 1 files changed, 3 insertions(+)

ただ、まだデータは残っているので、コミットSHA値を用いればアクセス可能。

↓ ここで、(ブランチから辿れなくなった)不要な履歴を削除

# ここで、不要な履歴を削除
!git reflog expire --expire=now --all
!git gc --aggressive --prune=now
出力
Enumerating objects: 16, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 2 threads
Compressing objects: 100% (8/8), done.
Writing objects: 100% (16/16), done.
Total 16 (delta 1), reused 0 (delta 0)
# 確認
!git branch -a -v
!git log --oneline --graph --all
出力
* master                311e71e test1000
  remotes/origin/master 311e71e test1000

* 311e71e (HEAD -> master, origin/master) test1000
* df46e6d (grafted) test999

過去履歴が直近の2個だけになった状態。(前述と同様)

# アクセス不可の確認
!git show --stat --oneline 10d6e72
出力
fatal: ambiguous argument '10d6e72': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
# アクセス不可の確認
!git show --stat --oneline e2607a2
出力
fatal: ambiguous argument 'e2607a2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

不要なデータが削除され、コミットSHA値を用いてもアクセスが不可能になっている。(履歴から完全に削除された状態)

試行したファイル

環境

Google Colaboratory、git version 2.25.1、access tokenを用いてGitHubへアクセス

3
3
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
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?