재우니의 블로그

 

 

GitLab - git 명령어로 커밋 기록 삭제(clear commit history)

 

첫 번째 방법

 

폴더를 삭제하면 git 저장소에 문제가 발생할 수 있습니다. 모든 커밋 기록을 삭제하고 싶지만 코드는 현재 상태로 유지하려면 다음을 시도하세요.

 

# Check out to a temporary branch:
git checkout --orphan TEMP_BRANCH

# Add all the files:
git add -A

# Commit the changes:
git commit -am "Initial commit"

# Delete the old branch:
git branch -D master

# Rename the temporary branch to master:
git branch -m master

# Finally, force update to our repository:
git push -f origin master

 

이렇게 하면 이전 커밋 기록이 유지되지 않습니다. 하지만 이것이 작동하지 않으면 아래의 다음 방법을 시도해 보세요.

 

 

두 번째 방법 

# Clone the project, e.g. `myproject` is my project repository:
git clone https://github/heiswayi/myproject.git

# Since all of the commits history are in the `.git` folder, we have to remove it:
cd myproject

# And delete the `.git` folder:
git rm -rf .git

# Now, re-initialize the repository:
git init
git remote add origin https://github.com/heiswayi/myproject.git
git remote -v

# Add all the files and commit the changes:
git add --all
git commit -am "Initial commit"

# Force push update to the master branch of our project repository:
git push -f origin master

 

 

참고: GitHub 계정의 자격 증명을 제공해야 할 수도 있습니다.

 


 

오류

 

 ! [remote rejected] master -> master (pre-receive hook declined)  오류가 발생할 경우가 존재합니다. 이는 Protected branches의 정책으로, Git Repository를 생성할 때 기본적으로 Maintainer에게만 push 권한이 부여되고 Developer에게는 권한이 부여되지 않아 발생된 부분으로, Settings에서 권한 재설정으로 push가 되도록 문제를 해결할 수 있습니다. 

참고사이트

(https://velog.io/@jeongpar/GitLab-pre-receive-hook-declined-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0)

 

PS E:\gitlab\intrauniv> git push -f origin master
Enumerating objects: 5033, done.
Counting objects: 100% (5033/5033), done.
Delta compression using up to 6 threads
Compressing objects: 100% (3828/3828), done.
Writing objects: 100% (5033/5033), 20.78 MiB | 6.35 MiB/s, done.
Total 5033 (delta 920), reused 4991 (delta 911), pack-reused 0       
remote: Resolving deltas: 100% (920/920), done.
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To https://gitlab.com/xxxx/xxxx.git
 ! [remote rejected] master -> master (pre-receive hook declined)    
error: failed to push some refs to 'https://gitlab.com/xxxx/xxxx.git'

 

 

해당 프로젝트의 Settings > Repository 에 들어가서, Protected branches 가 존재합니다. 아래 처럼 보호하기 위한 셋팅이 존재하면 unprotect 버튼을 클릭해서 해제하면 됩니다. 

 

 

 

다시 git push -f origin master 실행해 보니 아래와 같이 성공하고, gitlab 의 commits 이력이 지워져 있는것을 확인 할 수 있었습니다.

 

PS E:\gitlab\intrauniv> git push -f origin master
Enumerating objects: 5033, done.
Counting objects: 100% (5033/5033), done.
Delta compression using up to 6 threads
Compressing objects: 100% (3828/3828), done.
Writing objects: 100% (5033/5033), 20.78 MiB | 6.76 MiB/s, done.
Total 5033 (delta 920), reused 4991 (delta 911), pack-reused 0       
remote: Resolving deltas: 100% (920/920), done.
To https://gitlab.com/xxxx/xxxxx.git
 + 85cc315...60fcc3e master -> master (forced update)

 

 

참고 사이트 

 

https://gist.github.com/heiswayi/350e2afda8cece810c0f6116dadbe651

 

GitHub - Delete commits history with git commands

GitHub - Delete commits history with git commands. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com