diff --git a/content/blog/initialize-entire-commit-log.md b/content/blog/initialize-entire-commit-log.md index 03b4df1c..391e78b9 100644 --- a/content/blog/initialize-entire-commit-log.md +++ b/content/blog/initialize-entire-commit-log.md @@ -1,13 +1,17 @@ --- title: "git 커밋로그 전체 삭제" date: 2022-04-15T22:33:52+09:00 -lastmod: 2023-02-24T18:04:52+09:00 +lastmod: 2024-08-04T13:48:22+09:00 slug: "" description: "중요정보나 파일이 Public 레포지터리에 노출된 상황일 때, 커밋로그를 전체를 삭제(초기화)하는 방법" keywords: [] tags: ["git", "dev"] --- +{{< toc >}} + +  + ## 개요 특정 레포지터리의 전체 커밋로그를 삭제(초기화)하는 방법을 설명합니다. @@ -27,12 +31,13 @@ tags: ["git", "dev"] 4. `latest_branch`의 이름을 `main`으로 변경합니다. 5. 새 `main` 브랜치를 레포로 `push`합니다. +커밋로그 초기화에 대한 해결방법은 로컬에 다운로드 받은 레포지터리 디렉토리에서 실행해야 합니다. +   ### 주의사항 -이 가이드를 따라하면 지금까지의 main 브랜치의 전체 커밋 로그(히스토리)가 사라집니다. -삭제된 커밋 로그는 복구할 방법이 없다는 사실을 명심하도록 합니다. +이 가이드를 따라하면 지금까지의 main 브랜치의 전체 커밋 로그(히스토리)가 사라집니다. 삭제된 커밋 로그는 복구할 방법이 없다는 사실을 명심하도록 합니다.   @@ -47,30 +52,37 @@ git version 2.37.1 (Apple Git-137.1)   -## 해결법 +## 해결방법 + +git 명령어로 커밋 로그를 초기화하는 방법과 미리 준비된 스크립트로 초기화하는 방법이 있습니다. -### Checkout +  + +### git 명령어로 실행 + +#### Checkout `latest_branch`라는 이름의 브랜치를 생성합니다. ```bash # [>] main -$ git checkout --orphan latest_branch +git checkout --orphan latest_branch ``` `checkout`은 새로운 브랜치를 만드는 명령어입니다.   -### 전체 파일 Add +#### 전체 파일 Add + +전체 파일을 새로 만든 `latest_branch` 브랜치에 추가합니다. ```bash # [ ] main # [>] latest_branch -$ git add -A +git add -A ``` -전체 파일을 새로 만든 `latest_branch` 브랜치에 추가한다. `-A`는 전체 파일을 추가하는 옵션입니다.   @@ -78,61 +90,66 @@ $ git add -A ```bash # [ ] main # [>] latest_branch -$ git commit -am "Initial commit" +git commit \ + -m "Initial commit" \ + -m "Initialize repository to clean all commit history using commit history cleaner script" ``` 전체 파일을 그대로 새로 만든 `latest_branch` 브랜치에 커밋합니다.   -### 브랜치 삭제 +#### 브랜치 삭제 기존 `main` 브랜치를 삭제합니다. ```bash # [X] main # [>] latest_branch -$ git branch -D main +git branch -D main ``` 구 `main` 브랜치를 지우면 지금까지 기록된 전체 커밋 로그도 같이 삭제됩니다.   -### 새 브랜치 이름 변경 +#### 새 브랜치 이름 변경 새로 만든 `latest_branch` 브랜치를 `main`으로 변경합니다. ```bash # [>] latest_branch --> main -$ git branch -m main +git branch -m main ``` `-m`은 브랜치의 이름을 변경하는 옵션입니다.   -### 강제 업데이트 +#### 강제 업데이트 ```bash # [>] main -$ git push -f origin main +git push -f origin main ``` 마지막으로 커밋한 전체 파일을 강제로 `main` 브랜치에 올립니다.   -### 결과확인 +#### 결과확인 새 `main` 브랜치에서 커밋 로그를 확인합니다. ```bash # [>] main -$ git log --graph +git log --graph + +# Display commit history as a one-line summary with a graph +git log --oneline --graph ``` -`--graph` 옵션은 커밋 로그 전체를 트리 형태로 그려줍니다. +`git log`에서 `--graph` 옵션은 커밋 로그 전체를 트리 형태로 그려줍니다.   @@ -146,12 +163,54 @@ $ git log --graph Initial commit ``` -지금까지의 전체 커밋로그가 사라지고 초기화 커밋만 기록되었습니다. +지금까지의 전체 커밋로그가 사라지고 초기화 커밋만 기록되었습니다. + 이제 중요 정보가 노출된 커밋로그는 어느 누구도 확인할 수 없습니다.   -이걸로 조치가 끝났습니다. +커밋 로그 초기화가 완료되었습니다. + +  + +### 스크립트로 실행 + +먼저 Commit 로그를 초기화할 Git 디렉토리로 이동합니다. + +Github Cloud에 공개되어 있는 [커밋 로그 초기화를 위한 스크립트](https://github.com/younsl/box/blob/main/box/script/github/commit-history-cleaner.sh)`commit-history-cleaner.sh`를 다운로드 받습니다. + +```bash +wget -O commit-history-cleaner.sh \ + https://raw.githubusercontent.com/younsl/box/main/box/script/github/commit-history-cleaner.sh +``` + +  + +스크립트를 실행합니다. + +```bash +sh commit-history-cleaner.sh +``` + +  + +정말로 실행할 지 한 번 묻는데, 이 때 `y`를 입력합니다. + +```bash +This script will delete the main branch and create the latest_branch branch. +Do you want to continue? (yY/n) y +``` + +  + +커밋 로그 초기화된 결과를 확인합니다. + +```bash +# Display commit history as a one-line summary with a graph +git log --oneline --graph +``` + +커밋 로그 초기화가 완료되었습니다.   @@ -165,3 +224,10 @@ $ git log --graph 애초에 작업 목적을 잘 생각해보면 우리는 레포지터리의 커밋 로그 전체를 날리고 싶었습니다. main 브랜치를 그대로 다른 브랜치에 복제 떠서 백업한 후 main 브랜치 자체를 날리는게 훨씬 간단하고 안전합니다. 브랜치가 삭제될 때 그 안에 포함된 모든 커밋 로그도 같이 삭제된다는 점을 명심하세요. + +  + +## 참고자료 + +**Github** +[commit log 초기화 스크립트](https://github.com/younsl/box/blob/main/box/script/github/commit-history-cleaner.sh)