12-rm -rf .git 사용하지 맙시다

jje·2026년 2월 22일

개인 프로젝트

목록 보기
12/18

깃 기록 초기화

트러블슈팅이라고 볼 수 있나?

오류 하나 잡으려다가 멍청하게 깃 기록 초기화 하고 다시 복구하는 과정이다

문제 상황

구글+공공데이터 api 사용 후 커밋이 제대로 올라가지 않은걸 발견했다
실수로 서버 파일에 공공데이터 보안키 인증키를 남겨둔게 이유였다
이것도 이유는 맞았다

그래서 파일에서 그걸 싹 지우고 다시 올리려고 해도 계속 똑같은 오류가 났다
깃헙 쪽에서 보안키를 남겨둔 기록을 다 기억하고 거부하는거였다고 생각했다

오류 메세지를 제미나이한테 알려주면서 해보라는 해결방법을 시도했는데 모든 방법이 다 안먹혔다

깃 폴더 자체를 삭제 후 다시 연결
강제로(--force) push 하기
깃 홈페이지에서 일시적으로 스캐닝 해제하기
깃 기록 싹 지우기... 이러면 안됐는데

결과적으로 문제는 구글에서 다운로드 받은 인증키가 프로젝트 폴더에 있었기 때문인데
이 위치를 옮기고 환경 변수를 수정 한 다음 다시 커밋을 올렸는데
아니 모든 커밋이 싹 사라지고 방금 올려놓은 1개만 남아있었다
기절 했다

원인은 제미나이가 알려준 해결법 중 rm -rf .git
이게 문제였다
이것 때문에 싹 날아갔다

과거 기록이 사라진 건 아쉽지만, 덕분에 막혔던 깃허브 푸시 문제가 완벽히 해결되었습니다! 이제 다시 마음 편하게 기능 개발을 시작해볼까요? 리액트 화면에서 구글 맵을 띄우는 작업부터 도와드릴까요? 😊 ✨

미치겠다 진짜
그래 제대로 알아보지도 않고 하라는대로 한 내가 문제지...

다행히 어떻게든 기록을 쥐어짜냈다
json 형식으로 내가 깃헙에 뭔가를 올렸다는 기록들이 남아있었다...
아무것도 안한거 아니다 나 열심히 했다 뭔가를 했었다...

[
{
"id": "8687757208",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30982449774,
"ref": "refs/heads/main",
"head": "2ff7bc8dd8f36f466f576692ee84d839719099e9",
"before": "ee2d435330abe86b74782c2e77d4f281800e66f7"
},
"public": true,
"created_at": "2026-02-22T17:41:32Z"
},
{
"id": "8671311132",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30966022971,
"ref": "refs/heads/main",
"head": "ee2d435330abe86b74782c2e77d4f281800e66f7",
"before": "aeb6be500b96e009983d9032e249295448bd08ce"
},
"public": true,
"created_at": "2026-02-21T21:47:34Z"
},
{
"id": "8647384833",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30942267959,
"ref": "refs/heads/main",
"head": "aeb6be500b96e009983d9032e249295448bd08ce",
"before": "00ddbded156052034d8782805f3c60260771cc28"
},
"public": true,
"created_at": "2026-02-20T19:50:57Z"
},
{
"id": "8647175231",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30942058159,
"ref": "refs/heads/main",
"head": "00ddbded156052034d8782805f3c60260771cc28",
"before": "16ec84175d443ca34974b9a9fc6bb36f0cd300e4"
},
"public": true,
"created_at": "2026-02-20T19:42:33Z"
},
{
"id": "8646695333",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30941577881,
"ref": "refs/heads/main",
"head": "16ec84175d443ca34974b9a9fc6bb36f0cd300e4",
"before": "37239088daed042d123602812f9daa65996e0686"
},
"public": true,
"created_at": "2026-02-20T19:23:35Z"
},
{
"id": "8641299256",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30936193138,
"ref": "refs/heads/main",
"head": "37239088daed042d123602812f9daa65996e0686",
"before": "b1495cbf915da44a81deb384abd0c3ad5830f857"
},
"public": true,
"created_at": "2026-02-20T16:08:52Z"
},
{
"id": "8575100318",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30870062860,
"ref": "refs/heads/main",
"head": "62290e9edbf42627200b0d3739d045917e437bb4",
"before": "c2caa15c797e311dd9a791e5901cb86d6a4f9cc5"
},
"public": true,
"created_at": "2026-02-18T19:39:03Z"
},
{
"id": "8541337318",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30836309347,
"ref": "refs/heads/main",
"head": "c2caa15c797e311dd9a791e5901cb86d6a4f9cc5",
"before": "39ef4f99f62b35dd1230e9548190a2138e365c65"
},
"public": true,
"created_at": "2026-02-17T21:18:41Z"
},
{
"id": "8527112296",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30822091295,
"ref": "refs/heads/main",
"head": "39ef4f99f62b35dd1230e9548190a2138e365c65",
"before": "f0e08a5abf4da286eb63da292b4280c61201bc2c"
},
"public": true,
"created_at": "2026-02-17T13:17:37Z"
},
{
"id": "8522221757",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30817202558,
"ref": "refs/heads/main",
"head": "f0e08a5abf4da286eb63da292b4280c61201bc2c",
"before": "5f06bf002f75d7aac12f79e857320cb18e767cf9"
},
"public": true,
"created_at": "2026-02-17T10:32:47Z"
},
{
"id": "8522203073",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30817127462,
"ref": "refs/heads/main",
"head": "5f06bf002f75d7aac12f79e857320cb18e767cf9",
"before": "ec7158262c7b9a61095b888546e93c0543abf1bf"
},
"public": true,
"created_at": "2026-02-17T10:30:16Z"
},
{
"id": "8520434053",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30815411496,
"ref": "refs/heads/main",
"head": "ec7158262c7b9a61095b888546e93c0543abf1bf",
"before": "8514d6e0e1c204e6c16218cc83af891e73164bc3"
},
"public": true,
"created_at": "2026-02-17T09:32:09Z"
},
{
"id": "8487240223",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30782208946,
"ref": "refs/heads/main",
"head": "8514d6e0e1c204e6c16218cc83af891e73164bc3",
"before": "53fd796c85b9106fb3e03bfeb3b9af1276341e0f"
},
"public": true,
"created_at": "2026-02-16T09:35:31Z"
},
{
"id": "8261161473",
"type": "PushEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"repository_id": 1151158785,
"push_id": 30556155227,
"ref": "refs/heads/main",
"head": "53fd796c85b9106fb3e03bfeb3b9af1276341e0f",
"before": "8ebefd8a55883aaccf0a03b077fe02cf492c192f"
},
"public": true,
"created_at": "2026-02-09T06:21:22Z"
},
{
"id": "8187815665",
"type": "CreateEvent",
"actor": {
"id": 231828527,
"login": "korjje617-cloud",
"display_login": "korjje617-cloud",
"gravatar_id": "",
"url": "https://api.github.com/users/korjje617-cloud",
"avatar_url": "https://avatars.githubusercontent.com/u/231828527?"
},
"repo": {
"id": 1151158785,
"name": "korjje617-cloud/docentNote",
"url": "https://api.github.com/repos/korjje617-cloud/docentNote"
},
"payload": {
"ref": "main",
"ref_type": "branch",
"full_ref": "refs/heads/main",
"master_branch": "main",
"description": null,
"pusher_type": "user"
},
"public": true,
"created_at": "2026-02-06T05:53:50Z"
}
]

진짜 개같다 진짜 아
나 열심히 올렸는데...


아 잠시만 예전에 썼던 깃 폴더가 아직도 휴지통에 남아있었다

이걸 다시 복원시키면???


해결 과정

ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ

멍청하게 날렸던 깃 복구방법 정리한다


로컬 복구

처음에는 보안 위반으로 푸시가 안 되어 .git 폴더를 지웠지만
다행히 휴지통에서 과거의 기록이 담긴 .git을 찾았다 < 이게 있어야 한다 이거 없으면 복구 자체를 못한다 반복하지만 이게 없으면 기록 복구 못한다

  • 현재 프로젝트 폴더의 .git을 지우고, 예전 .git 폴더 전체를 복사해서 붙여넣음

  • git log --oneline를 통해 커밋 이력이 내 컴퓨터로 돌아온 것을 확인

깃허브 원격 연결 재설정

저장소 정보를 새로 가져왔으니 목적지 주소를 다시 알려줘야한다

  • git remote add origin [저장소주소] 명령어로 내 컴퓨터와 깃허브 서버를 다시 연결

깃허브 프로텍션

다시 강제로 밀어 넣으려 했으나(--force)
깃허브 보안 시스템이 과거 기록 속에 숨어있던 구글 서비스 계정 키를 찾아내서 푸시를 거부 < 이게 근본적인 원인

  • GH013: Repository rule violations 발생. 과거의 실수(인증키 포함 커밋)까지 깃허브가 다 감시하고 있었음

보안 우회 (최종 성공)

깃허브가 에러 메시지와 함께 준 전용 언블락(Unblock) 링크

  • 작업: 에러 메시지에 뜬 https://github.com/.../unblock-secret/... 링크 접속

  • 설정: "알고 올리는 것이니 허용해달라"는 승인 버튼을 누름

  • 저장: 다시 git push origin main --force를 입력해서 기록 복구


교훈

프로젝트 폴더 내부에는 보안키, 인증키 관련된 그 어떤 파일이나 기록도 남겨두지 말고

진짜 그 어떤 일이 있어도

rm -rf .git

이거하나는 진짜 쓰지 말아야겠다
모든 안전수칙은 피로 쓰여진 어쩌고저쩌고

profile
공부기록

0개의 댓글