팀프로젝트

Git 트러블슈팅: rebase 문제 해결과 안전한 Git 사용법🌟

choijming21 2024. 10. 15. 00:15

1. 문제 발생❓

원격 dev 브랜치에서 로컬 개인 브랜치 feat/mypage로 pull을 시도했을 때, 다음과 같은 문제가 발생했습니다.

  • 충돌이 발생하면서 rebase가 자동으로 시작됨.
  • rebase 과정에서 기존에 작업 했던 footer 컴포넌트가 사라짐.
  • 브랜치 상태가 ''no branch, rebasing feat/mypage"로 변경됨.
  • git config --global pull.rebase false 설정으로 문제 해결을 시도했으나 실패

 

 

 

 

 

2. 원인 추론 🔎

  • Git 설정 문제: pull.rebase 설정이 true로 되어 있어 pull 시 자동으로 rebase가 실행되었을 가능성이 높아보입니다.
  • 로컬 브랜치와 원격 브랜치 사이에 많은 차이가 있어 충돌이 발생했을 수 있습니다.
  • git add . 했다가 다른거 수정했다가 다시 git add . 또 했다가 git commit 했다가 상황이 꼬여서 복잡한 병합 상황이 만들어졌을 수 있습니다.

 

 

 

 

3. 해결 과정 📋

  1. VS Code의 소스 제어 탭에서 변경사항 되돌리기 버튼을 사용하여 rebase 이전 상태로 복구
  2. no branch -> feat/mypage 브랜치로 전환
  3. 다시 로컬 dev 브랜치로 전환
  4. 원격 dev 브랜치를 로컬 dev 브랜치로 pull 받음
  5. 다시 내 로컬 개인 브랜치인 feat/mypage로 전환
  6. 로컬 dev 브랜치의 데이터를 개인 브랜치 feat/mypage로 머지함 (명령어: git merge feat/mypage)
  7. 머지 성공함 !!

 

 

 

 

3-1.  rebase 이해하기

rebase는 Git에서 브랜치 기준(base)을 변경하는 작업입니다.

 

  • 장점: 커밋 히스토리를 깔끔하게 정리할 수 있습니다.
  • 단점: 공유 브랜치에서 사용 시 히스토리 충돌 문제 발생이 가능합니다.

 

 

주의사항

  • 개인 브랜치에서만 사용하는 것이 안전합니다.
  • 공유 브랜치에서는 merge를 사용하는 것이 좋습니다.
  • rebase 후 강제 푸쉬(force push)가 필요할 수 있어 위험성이 증가합니다.

 

 

 

 

3-2. git config --global pull.rebase false 설정 이해하기

이 설정은 git pull 명령 실행 시 rebase 대신 mergy를 사용하도록 지정하는 명령어입니다.

 

  • 기본값: false (merge 사용)
  • true로 설정: pull 시 자동으로 rebase 실행
  • false로 설정: pull 시 merge 사용 (더 안전한 옵션 ⭐⭐⭐⭐⭐)

 

 

 

 

 

4. 결과 ❤‍🔥

기존에 작업했던 footer를 날리는 일 없이 dev와 머지에 성공할 수 있었습니다!

 

 

 

 

 

 

5. 안전한 Git 사용을 위한 꿀팁 🍯

  • 중요한 변경 전 항상 브랜치 생성해야 합니다.
  • 공유 브랜치에서는(dev와 같은) rebase 대신 merge 사용해야 합니다.
  • 원격 브랜치에서 로컬 브랜치로 pull 받아오는 것은 위험 요소가 많음으로 위의 방법과 같이 dev를 로컬로 먼저 pull 받아오고 내 브랜치에서 mergy 하는 것이 더욱 안전합니다!! 이왕이면 머지하기 전에 개인 원격 브랜치에 미리 push 해두는 것이 좋습니다. push를 해두면 내 브랜치에서 머지할 때 만약 돌이킬 수 없는 문제가 발생했다면, 작업을 취소하고 기존 내 브랜치에서 다시 pull 받아오면 됩니다!
  • 습관적으로 git branch 확인과 git status 확인이 필수인 것 같습니다.