[관리]시행착오 - gyunam-bark/nb02-how-do-i-look-team1 GitHub Wiki

특정 기능과 관련된 시행착오가 아닌 범용적으로 발생한 시행착오를 정리합니다.


커밋 스쿼시로 인한 Git 스토리 관리 및 저장소 초기화 가이드

이 문서는 Git 커밋 히스토리를 정리(Squash)하려다 문제가 발생했을 때, 안전하게 로컬 저장소를 초기화하고 원격 저장소의 최신 상태를 가져오는 방법을 안내합니다.


1. Git 커밋 스쿼시(Squash) 시도 및 발생 가능한 문제점

개발 과정에서 여러 작은 커밋들을 하나의 논리적인 커밋으로 합쳐(Squash) Git 히스토리를 깔끔하게 유지하는 것은 좋은 습관입니다. 주로 git rebase -i 명령을 사용합니다.

일반적인 스쿼시 과정:
1. git log --oneline 으로 커밋 히스토리 확인.
2. git rebase -i HEAD~N 명령으로 대화형 리베이스 시작.
3. 열린 편집기에서 가장 오래된 커밋을 pick으로 두고, 나머지 커밋들을 squash 또는 fixup으로 변경.
4. 최종 커밋 메시지 작성 후 저장.

발생 가능한 문제점:

  • 충돌(Conflict) 발생: 리베이스 과정에서 커밋 간의 변경 사항이 겹칠 경우 충돌이 발생할 수 있습니다. 이를 수동으로 해결해야 합니다.
  • 복잡한 히스토리: 이미 많은 커밋이 얽혀 있거나, 이전 커밋에서 큰 구조 변경이 있었다면 리베이스 과정 자체가 매우 복잡해질 수 있습니다.
  • .git/rebase-merge 디렉토리 문제: 리베이스 중 오류가 발생하거나 중단될 경우, .git/rebase-merge (또는 유사한) 디렉토리가 남아 Git 상태가 꼬일 수 있습니다. (실제 겪었던 상황)
  • 강제 푸시 (git push -f) 필요성: 이미 원격 저장소에 푸시된 커밋들을 스쿼시하면 로컬과 원격의 히스토리가 달라지므로, 강제 푸시(git push -f)가 필요하게 됩니다. 이는 다른 협업자에게 문제를 일으킬 수 있어 매우 신중하게 사용해야 합니다.

2. 로컬 저장소 초기화 및 GitHub에서 다시 불러오기 (해결 방법)

Git 상태가 복잡하게 꼬였을 때 가장 확실하고 안전하게 문제를 해결하는 방법은, 현재 로컬 저장소를 완전히 제거하고 GitHub의 원격 저장소에서 최신 상태를 다시 클론하는 것입니다.

  1. 중요한 파일 백업 (필수)
  • 중요: 현재 작업 중인 로컬 폴더(nb02-how-do-i-look-team1) 내에 아직 커밋되지 않았거나, GitHub에 푸시되지 않은 중요한 코드 변경사항이 있다면, 해당 파일들을 다른 임시 폴더(예: C:\temp_backup 또는 바탕화면)에 수동으로 복사하여 백업합니다.
  • 특히 .env 파일과 같이 Git에 포함되지 않는 설정 파일이나, 충돌 해결 중이던 소스 코드 파일들을 꼼꼼히 확인하세요.
  1. 현재 로컬 Git 저장소 디렉토리 삭제
  • 파일 탐색기(Windows 탐색기)를 엽니다.
  • 프로젝트 상위 경로(C:\Users\seulbee\Documents 등)로 이동합니다.
  • nb02-how-do-i-look-team1 폴더 자체를 선택하고 완전히 삭제합니다. -이 폴더를 삭제하면 .git 숨김 폴더를 포함하여 모든 Git 관련 정보와 로컬 파일들이 사라집니다.
  1. 새로운 터미널/PowerShell 창 열기
  • 현재 열려있는 모든 터미널 창을 닫고, 완전히 새로운 깨끗한 터미널 창을 엽니다. (이전 Git 명령으로 인한 불안정한 환경 상태를 초기화합니다.)
  1. 프로젝트를 클론(Clone)할 디렉토리로 이동
  • Git 저장소를 다운로드받을 상위 디렉토리로 이동합니다.(터미널 활용) ex)cd C:\Users\seulbee\Documents
  1. 원격 저장소 클론 (Clone)
  • 팀의 GitHub 레포지토리 URL을 사용하여 프로젝트를 새로 다운로드받습니다. (터미널 활용)
git clone https://github.com/gyunam-bark/nb02-how-do-i-look-team1.git
  • 이 명령이 성공하면 C:\Users\seulbee\Documents 아래에 nb02-how-do-i-look-team1이라는 새 폴더가 생성되고, main 브랜치의 최신 내용이 받아집니다.
  1. 새로 클론한 프로젝트 디렉토리로 이동 (터미널 활용)
cd nb02-how-do-i-look-team1
  1. 개발 브랜치 (dev)로 전환 및 최신 상태 동기화
  • 원격 dev 브랜치의 최신 변경사항을 로컬로 가져와 동기화합니다.
git checkout dev
git pull origin dev
  1. 작업 브랜치 (task-N 등) 가져오기 및 전환 (N은 현재 작업 번호 써주시면 됩니다.)
  • 본인의 작업 브랜치(task-N 등)의 최신 내용을 원격에서 가져와 로컬에 생성하고 해당 브랜치로 전환합니다.
git fetch origin task-N # 원격 origin에서 task-N 브랜치 정보 가져오기
git checkout task-N     # 로컬 task-N 브랜치로 전환
  • 이로써 당신의 task-N 브랜치가 GitHub의 최신 상태로 로컬에 복구됩니다.

3. 초기 환경 설정 및 작업 복원

  • 저장소를 새로 클론한 후에는 프로젝트 실행을 위한 초기 설정이 필요합니다.
  • 아래에는 읽고 해당되는 부분에 설정을 하시길 바랍니다.
  1. 필요한 Node.js 패키지 설치
npm install
  1. .env 파일 설정
  • 프로젝트 루트의 .env 파일을 열어 DATABASE_URL, EXPRESS_PORT, JWT_SECRET 등 환경 변수들을 올바르게 설정합니다. (특히 DATABASE_URL의 포트 번호와 비밀번호를 다시 한번 확인)
  • 참고: EXPRESS_PORT=0이라면 실제 포트를 할당받지 못할 수 있으므로 3000 등 적절한 포트 번호로 변경을 권장합니다.
  1. .gitignore 파일 확인
  • 프로젝트 루트의 .gitignore 파일에 node_modules/.env등 포함되어 Git 추적에서 제외되는지 확인합니다.
  1. PostgreSQL 서버 실행 확인
  • PostgreSQL 데이터베이스 서버가 정상적으로 실행 중인지 확인합니다.
  1. Prisma 마이그레이션 실행
  • 데이터베이스 스키마를 동기화하고 Prisma Client를 재생성합니다.
  • ⚠️ 경고: 이 명령은 개발 데이터베이스의 모든 데이터를 초기화(삭제)합니다.
npx prisma migrate reset
  • y를 입력하여 초기화를 승인하고, 마이그레이션이 성공하는지 확인합니다.
  • (npx prisma generatemigrate reset에 포함되어 자동 실행됩니다.)
  1. 백업했던 코드 복원
  • 1단계에서 백업했던 미커밋 코드 변경사항이 있다면, 이제 해당 파일들을 프로젝트의 올바른 위치에 다시 복사하여 붙여넣습니다.
  1. 백엔드 서버 실행
  • 루트 디렉토리에서 다음 명령을 실행합니다.
npm run start:dev