はじめに
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へアクセス