GitLab - git 명령어로 커밋 기록 삭제 (git : clear commits history)
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