소프트웨어 Git의 커밋 기록을 지우고 최신 파일의 커밋 하나만 남기고 싶습니다
2018.08.06 02:45
GitLab을 사용중입니다. GitHub도 매한가지일거 같지만, 혹시나 하여 사용 플랫폼을 적어둡니다.
가령 이러한 커밋 기록이 있다고 가정하겠습니다. 모두 master 브랜치입니다.
1aaaaa : HEAD
2bbbbb
3ccccc
4ddddd : Initial Commit
이런 상황일때, 다음과 같은 기록처럼 보이게 하고 싶습니다.
1aaaaa : HEAD, INITIAL COMMIT
즉, 2bbbbb부터 4ddddd까지의 예전 기록들을 다 날린다는 의미입니다. 커밋 기록에도 오직 1aaaaa만 보이고 이전 커밋 기록들은 완전히 삭제하는겁니다. 실제 파일들은 최신 파일 상태 그대로 유지하고요.
제가 시도해본건 https://stackoverflow.com/a/13102849에 있는 방법입니다. GitHub Desktop에 git.exe가 있길래 그것으로 진행했습니다.
git checkout --orphan newBranch
git add -A # Add all files and commit them
git commit
git branch -D master # Deletes the master branch
git branch -m master # Rename the current branch to master
git push -f origin master # Force push master branch to github
git gc --aggressive --prune=all # remove the old files
push -f 단계에서 master : master이었던가, 그러한 오류가 나면서 쓰기가 거부되었다, 라는 식의 메세지가 나오며 과정을 완료하지 못했습니다. 일단은 레포지토리를 통채로 삭제한 이후, 다시 파일들을 업로드함으로서 날리는 그런 식으로 했는데... 매번 커밋 로그 정리할때 그렇게 할 수는 없고... Git 명령어를 이용한 더 근사한 방법이 없나, 해서 여쭤봅니다.
참고로 https://gist.github.com/heiswayi/350e2afda8cece810c0f6116dadbe651에 있는 방법도 위 링크에 있는 방법과 같습니다.
댓글 [8]
-
흑심품었네 2018.08.06 02:50 -
TetraTheta 2018.08.06 02:57 ...??????????????? 이게 안되서 물어본건데요?
-
흑심품었네 2018.08.06 03:00 안되는거니 제가 수정해서 쓰려구여 감사합니다^^
-
TetraTheta 2018.08.06 03:04 이 글은 강의글이 아니라 질문글입니다. 보통 질문글에서 달리는 답변에서 기대하는건 질문에 대한 답변이지, 질문 내용이 알차니 내가 수정해 쓰겠다라는 답변이 아니죠.
동문서답때문에 굉장히 당혹스럽네요.
-
하늘아래서 2018.08.06 08:52
.git 폴더를 지우고 새로 커밋 해보세요..
-
스프리간 2018.08.06 12:59 https://git-scm.com/book/ko/v1/Git-%EB%8F%84%EA%B5%AC-%ED%9E%88%EC%8A%A4%ED%86%A0%EB%A6%AC-%EB%8B%A8%EC%9E%A5%ED%95%98%EA%B8%B0#%EC%BB%A4%EB%B0%8B-%ED%95%A9%EC%B9%98%EA%B8%B0
"pick"이나 "edit"말고 "squash"를 입력하면 Git은 해당 커밋과 바로 이전 커밋을 합칠 것이고 커밋 메시지도 Merge한다. 그래서 3개의 커밋을 모두 합치려면 스크립트를 아래와 같이 수정한다:
를 참고하시면 되지 않을 까요?
-
mrsshr 2018.08.06 13:02
git rebase -i HEAD~4
; 모두 squash
하신다음 force push 하시면 됩니다만 다른 사용자들이 checkout한 경우 문제 발생합니다.
-
TetraTheta 2018.08.07 01:54 master : master 원인을 알아낸 후, 질문글에 있던 방법대로 다시 했습니다.
원인은 GitLab이 master 브랜치에 force push를 못하게 해놨더군요. 지금은 그냥 alpha 브랜치 만들고, 거기서 작업하고 있습니다.
좋은 설명 감사합니다.
수정해서 잘 쓰겠습니다