Computer >> 컴퓨터 >  >> 문제 해결 >> Windows 오류

Git '먼저 현재 인덱스를 해결해야 합니다' 오류 해결 방법

Git 작업 중 "먼저 현재 인덱스를 해결해야 합니다(You need to resolve your current index first)"라는 오류 메시지가 나타난다면, 이는 병합 충돌(merge conflict)이 발생했다는 뜻입니다. 충돌을 해결하기 전까지는 다른 브랜치로 체크아웃할 수 없으며, 이 메시지는 병합이 실패했거나 파일 간에 충돌이 존재한다는 신호이기도 합니다.

Git  먼저 현재 인덱스를 해결해야 합니다  오류 해결 방법

파일, 병합, 충돌 같은 용어가 낯설게 느껴질 수 있습니다. Git은 여러 사람이 동시에 파일을 작업하고, 각자의 로컬 코드 사본을 클라우드에 저장된 코드로 푸시(push)할 수 있게 해주는 버전 관리 플랫폼입니다. 다운로드받았거나 이미 푸시된 코드를 수정한 뒤 다시 클라우드에 푸시하면, 변경 사항이 로컬 사본 기준으로 클라우드에 덮어쓰기 됩니다.

Git에는 브랜치(branch)라는 개념이 있습니다. 마스터(master) 브랜치가 있고, 여러 하위 브랜치가 여기서 분기됩니다. 특히 checkout 명령으로 한 브랜치에서 다른 브랜치로 전환할 때 현재 브랜치의 파일에 충돌이 있으면 이 오류가 발생합니다. 충돌을 해결하지 않으면 브랜치를 전환할 수 없습니다.

Git 오류 '먼저 현재 인덱스를 해결해야 합니다'의 원인

앞서 언급했듯이 이 오류의 원인은 크게 두 가지로 제한적입니다. 다음 상황에서 이 오류를 경험하게 됩니다:

  • 병합 실패: 병합이 실패하여, 다른 작업을 진행하기 전에 병합 충돌을 먼저 처리해야 하는 경우입니다.
  • 파일 충돌: 현재(또는 대상) 브랜치의 파일에 충돌이 있어, 브랜치 체크아웃이나 코드 푸시가 불가능한 경우입니다.

해결 방법을 진행하기 전에 적절한 버전 관리가 되어 있는지 반드시 확인하고, 충돌을 해결하는 동안에는 다른 팀원들이 코드를 수정하지 못하도록 조율하는 것이 좋습니다.

해결 방법 1: 병합 충돌 직접 해결하기

병합이 Git에 의해 자동으로 해결되지 않으면, 인덱스와 작업 트리가 특수한 상태로 남아 충돌을 해결하는 데 필요한 모든 정보를 제공합니다. 충돌이 발생한 파일은 인덱스에서 특별히 표시되며, 문제를 해결하고 인덱스를 업데이트하기 전까지는 계속해서 이 오류 메시지가 나타납니다.

  1. 모든 충돌을 해결합니다. 인덱스에 의해 표시된 충돌 파일들을 하나씩 확인하고, 그에 맞게 내용을 수정합니다.
  2. 모든 충돌을 해결한 후 해당 파일을 add(스테이징)한 뒤 commit합니다.

명령어 예시는 다음과 같습니다:

$ git add file.txt

$ git commit

커밋할 때 개인적인 코멘트를 추가할 수도 있습니다:

$ git commit –m "This is Appuals Git repository"
  1. 충돌을 해결한 후 기존 브랜치에서 체크아웃을 시도하여 문제가 해결되었는지 확인합니다.

해결 방법 2: 병합 되돌리기

브랜치를 병합하다가 실수를 저질러 프로젝트가 엉망이 되고, 팀원들에게 지적받는 경우도 종종 있습니다. 이럴 때는 이전 커밋(병합 커밋)을 되돌려야(revert) 합니다. 이렇게 하면 병합이 완전히 취소되고, 프로젝트 전체가 병합을 수행하기 이전 상태로 되돌아갑니다. 더 이상 복구하기 어려울 정도로 상황이 꼬였다면 생명줄과 같은 역할을 할 수 있습니다.

병합을 되돌리려면 다음 명령어를 입력합니다:

$ git reset -–merge

위 명령은 인덱스를 재설정하고, 'commit'과 'head' 사이에서 서로 다른 작업 트리의 파일들을 업데이트합니다. 단, 인덱스와 작업 트리 사이에 차이가 있는 파일들은 그대로 유지됩니다.

HEAD를 되돌리는 방법도 시도해 볼 수 있습니다:

$ git revert HEAD

되돌릴 정확한 병합 커밋을 지정하고 싶다면, 동일한 revert 명령어에 추가 매개변수를 붙여 사용하면 됩니다. 이때 병합 커밋의 SHA1 해시가 사용됩니다. -m 뒤에 오는 1은 병합 대상 쪽(병합되는 브랜치)의 부모를 유지하겠다는 의미입니다. 이 revert의 결과로 Git은 병합의 변경 사항을 롤백하는 새로운 커밋을 생성합니다.

$ git revert -m 1 dd8d6f587fa24327d5f5afd6fa8c3e604189c8d4>