git

Git 문제 해결

임베디드 친구 2024. 12. 16. 08:40
728x90
반응형

Git 문제 해결

안녕하세요, '소프트웨어 공장'에 오신 것을 환영합니다. 이번 포스팅에서는 Git을 사용하면서 겪을 수 있는 다양한 문제 해결 시나리오를 다루어 보겠습니다. Git은 강력한 버전 관리 도구이지만, 초보자나 숙련자 모두 예상치 못한 문제에 직면할 때가 있습니다. 이번 포스팅을 통해 충돌 해결, 잘못된 커밋 복구, 그리고 안전하게 커밋 기록을 정리하는 방법을 배워 보세요.

1. 충돌 해결하기 (Merge Conflict)

Merge Conflict는 Git에서 자주 발생하는 문제 중 하나입니다. 여러 명의 개발자가 동시에 같은 파일의 같은 부분을 수정하면 Git이 어느 쪽의 변경사항을 적용해야 할지 알 수 없어 충돌이 발생합니다. 이러한 충돌은 팀 협업 중 빈번히 발생하기 때문에 반드시 해결하는 방법을 알아두어야 합니다.

충돌 발생 상황

충돌은 보통 다음과 같은 상황에서 발생합니다.

  • 두 명 이상의 개발자가 같은 파일을 서로 다른 브랜치에서 수정한 후 이를 병합하려고 할 때
  • rebase를 사용할 때 로컬 변경사항이 원격 브랜치의 변경사항과 충돌할 때

충돌 해결 방법

충돌을 해결하려면 다음 단계들을 따라야 합니다.

  1. 충돌 확인: 충돌이 발생하면 Git은 해당 파일에 특별한 마커(<<<<<<<, =======, >>>>>>>)를 삽입하여 충돌된 부분을 표시합니다.
  2. 수동으로 해결: 충돌된 파일을 열어 마커가 표시된 부분을 찾아, 어떤 변경사항을 유지하고 어떤 부분을 삭제할지 결정합니다.
  3. 파일 수정 후 커밋: 충돌을 해결한 후 파일을 저장하고 git add 명령어로 수정된 파일을 추가합니다. 그런 다음 git commit으로 충돌 해결 내용을 커밋합니다.
$ git add <충돌 해결된 파일>
$ git commit -m "Merge conflict resolved"

실습 예제

예를 들어, feature 브랜치와 main 브랜치에서 같은 파일의 같은 부분을 수정했다고 가정해 보겠습니다.

$ git merge feature

이 명령어로 feature 브랜치를 main에 병합하려고 할 때 충돌이 발생할 수 있습니다. 이때, 해당 파일을 열고 변경된 부분을 수동으로 선택하고 해결해야 합니다.

2. 잘못된 add, commit, push 되돌리기

Git을 사용하다 보면 실수로 잘못된 파일을 add 하거나 잘못된 내용을 commit, push하는 경우가 있습니다. 다행히 Git은 이러한 실수를 쉽게 되돌릴 수 있는 기능을 제공합니다.

잘못된 git add 되돌리기

잘못된 파일을 git add 했을 때는 간단히 git restore --staged 명령어를 사용하면 됩니다.

$ git restore --staged <파일명>

이 명령어는 인덱스에서 해당 파일을 제거하고 수정된 파일을 작업 디렉토리 상태로 유지합니다.

잘못된 commit 되돌리기

실수로 잘못된 커밋을 했을 경우, 다음과 같은 방법으로 되돌릴 수 있습니다.

  • 가장 최근의 커밋을 수정하려면: git commit --amend를 사용하여 마지막 커밋을 수정할 수 있습니다. 이 방법은 커밋 메시지를 변경하거나 파일을 추가/삭제할 때 유용합니다.
$ git commit --amend
  • 이미 푸시된 커밋 되돌리기: 실수로 잘못된 커밋을 원격 저장소에 푸시했다면, git revert를 사용하는 것이 안전한 방법입니다. git revert는 이전 커밋을 무효화하는 새로운 커밋을 생성하여 기록을 안전하게 유지합니다.
$ git revert <커밋 해시>

잘못된 push 되돌리기

원격 저장소에 잘못된 내용을 푸시한 경우에는 다음과 같은 방법으로 되돌릴 수 있습니다.

  • 로컬 브랜치를 수정 후 강제 푸시: 로컬에서 잘못된 커밋을 되돌리고 git push -f 명령어로 강제 푸시할 수 있습니다. 그러나 이 방법은 협업 중인 팀원들에게 영향을 줄 수 있으므로 신중하게 사용해야 합니다.
$ git reset --hard <올바른 커밋 해시>
$ git push -f

3. 커밋 기록을 안전하게 정리하는 방법

프로젝트를 진행하다 보면 커밋 기록이 지저분해지거나 불필요한 커밋이 많이 생기는 경우가 있습니다. 이런 경우 커밋 기록을 정리하여 프로젝트 히스토리를 더 깔끔하고 이해하기 쉽게 만들 수 있습니다.

git rebase를 이용한 커밋 정리

git rebase 명령어를 사용하면 커밋 히스토리를 다시 작성하여 깔끔하게 정리할 수 있습니다. 특히 여러 개의 불필요한 커밋을 하나로 합치거나 커밋 메시지를 수정하는 데 유용합니다.

$ git rebase -i <커밋 해시>

이 명령어를 실행하면 인터랙티브 모드가 실행되어 커밋을 합치거나 수정할 수 있는 편집 화면이 나타납니다. 각 커밋 앞에 pick, squash 등을 사용하여 커밋을 조정할 수 있습니다.

git reset을 이용한 커밋 삭제

git reset 명령어를 사용하여 특정 커밋 이후의 변경사항을 되돌릴 수 있습니다. 이때 --soft, --mixed, --hard 옵션을 사용하여 되돌리는 범위를 조정할 수 있습니다.

  • --soft: 커밋만 취소하고 변경사항은 그대로 유지합니다.
  • --mixed: 커밋과 인덱스를 취소하고 변경사항은 작업 디렉토리에 유지합니다.
  • --hard: 커밋, 인덱스, 작업 디렉토리까지 모두 취소합니다.
$ git reset --soft <커밋 해시>

주의사항

git resetgit rebase는 히스토리를 변경하기 때문에 원격 저장소와의 불일치가 발생할 수 있습니다. 팀 협업 중이라면 이러한 명령어 사용 시 팀원들과의 협의를 통해 조심스럽게 사용하는 것이 중요합니다.

마치며

이번 포스팅에서는 Git 사용 중 자주 발생하는 문제 해결 시나리오에 대해 다루어 보았습니다. 충돌 해결 방법, 잘못된 커밋 복구, 그리고 커밋 기록을 안전하게 정리하는 방법을 익히면 Git을 더욱 효과적으로 사용할 수 있습니다. 특히 협업 프로젝트에서 이러한 Git 스킬은 필수적입니다.

728x90
반응형