git] GitHub에서 보안 정보가 포함된 커밋 삭제하기(인터렉티브 리베이스, 강제 푸시)

손지민·2024년 8월 1일
1

GitHub

목록 보기
10/12
post-thumbnail

GitHub에서 보안 정보가 포함된 커밋 삭제하기

요약

보안 정보가 포함된 커밋을 GitHub에서 삭제하려면 Git의 인터랙티브 리베이스 기능을 사용하여 해당 커밋을 제거하고, 수정된 히스토리를 원격 저장소에 강제 푸시해야 합니다. 이 과정은 주의가 필요하며, 팀원과 사전 협의 후 진행하는 것이 중요합니다.

개발 환경

  • 운영 체제: Windows 11
  • 명령어 입력: CMD (명령 프롬프트) 사용
  • 충돌 해결 도구: IntelliJ IDEA

과정

1. 상황 설명

개발 중 실수로 보안 정보가 포함된 파일을 커밋하여 GitHub에 푸시했습니다. 이를 삭제하고 수정된 히스토리를 원격 저장소에 반영하는 방법을 설명합니다.

2. 사전 준비

  • Git 설치: 로컬 환경에 Git이 설치되어 있어야 합니다.
  • 로컬 저장소 준비: 문제가 있는 로컬 저장소가 필요합니다.
  • 커밋 해시 확인: 삭제할 커밋의 해시 값을 확인합니다.
  • (최근 커밋이라면 아래에 알려주는 방법대로 진행하면 최근 n 개의 커밋을 불러올 수 있습니다.)

3. 백업 생성

리베이스 작업 전, 로컬 저장소의 백업을 생성합니다. Git 디렉토리를 제외한 프로젝트 폴더를 압축하여 보관합니다.

zip -r project_backup.zip . -x ".git/*"
  • 이 명령은 .git 디렉토리를 제외한 프로젝트의 모든 파일을 project_backup.zip으로 압축합니다.
  • 저 같은 경우에는 탐색기에서 해당 프로젝트 폴더 우클릭하여 zip 압축했습니다.

4. 인터랙티브 리베이스 시작

git checkout main
git pull origin main
git rebase -i HEAD~n
  • HEAD~n에서 n은 삭제할 커밋까지의 깊이입니다. n은 보통 삭제할 커밋부터 가장 최근 커밋까지의 개수로 지정합니다.
  • 이 과정에서 이미 rebase가 진행 중이라고 한다면 아래 명령어를 입력하여 진행 중인 rebase를 중단합니다:
git rebase --abort

5. 리베이스 편집기에서 커밋 삭제

리베이스 편집기가 열리면 삭제할 커밋 앞에 drop을 입력합니다.

  • 여기서 drop 으로 변경할 때 단순히 타이핑으로 변경이 안됐습니다. 변경하려는 라인에서 ctrl+a 입력하니까 해당 pick 에서 edit 이나 다른 걸로 변경이 가능했습니다. 여러번 넘기다보면 drop 나왔습니다.
pick f123456 Initial commit
drop a1b2c3d Remove sensitive information
pick 4d5e6f7 Add new feature

편집 내용 저장 및 종료 방법:

  • CMD에서: Ctrl + X를 누른 후 Y를 입력하고 Enter 키를 눌러 저장합니다.
  • IntelliJ Terminal(cmd)에서: Esc 키를 누르고 :wq를 입력한 후 Enter 키를 눌러 저장합니다.
    편집 내용을 저장하고 종료하면 Git이 리베이스를 진행합니다.

6. 충돌 해결

리베이스 도중 충돌이 발생할 수 있습니다. IntelliJ IDEA를 사용하여 충돌을 수동으로 해결한 후, 다음 명령을 사용하여 리베이스를 계속 진행합니다.

git add <conflicted_file>
git rebase --continue
  • 모든 충돌이 해결될 때까지 이 과정을 반복합니다.
  • 리베이스 도중 변경된 파일은 자동으로 커밋되므로 별도로 커밋할 필요가 없습니다.

7. 수정된 히스토리 강제 푸시

히스토리를 수정한 후에는 원격 저장소에 강제 푸시합니다. 이 과정은 협업 환경에서는 신중하게 처리해야 합니다.

git push origin main --force
  • --force 옵션은 원격 저장소의 히스토리를 덮어씁니다. 팀원과 사전 협의를 통해 동의를 받은 후 진행해야 합니다.

주의 사항

  • 히스토리 조작의 위험성: 리베이스와 강제 푸시는 협업자에게 혼란을 줄 수 있으며, 잘못된 히스토리로 인한 데이터 손실을 유발할 수 있습니다.
  • 협업자 알림: 강제 푸시 전에 팀원에게 변경 사항을 알리고 동의를 받는 것이 중요합니다.
  • 보안 정보 보호: 커밋에 보안 정보가 포함되지 않도록 주의해야 하며, .gitignore 파일을 사용하여 민감한 정보를 추적하지 않도록 설정합니다.

결론

보안 정보가 포함된 커밋을 삭제하는 것은 보안을 유지하는 데 중요한 작업입니다. Git의 인터랙티브 리베이스와 강제 푸시를 통해 이러한 문제를 해결할 수 있습니다. 작업 중에는 협업자와의 소통을 강화하고, 항상 안전한 코드 관리를 위해 노력해야 합니다.

profile
Developer

0개의 댓글