파일 및 패키지 이름 변경으로 인해 Git branch 이동이 안될 때

지니·2022년 3월 1일
0

대학생의 일기

목록 보기
16/17

에러 발생

클래스 명이나 패키지 명이 네이밍 컨벤션에 맞지 않아 변경해야 할 경우가 있다. 해당 이슈를 수행한 후 다음 이슈를 처리하러 feature -> develop 브랜치로 이동하고자 할 때 아래와 같은 에러를 접하게 된다.

error: The following untracked working tree files would be overwritten by checkout:




해결 방법

원래 master에 아래와 같은 class가 있었다고 가정해보자.

package com.example.test.testpackage;

public class testclass {

}

컨벤션을 지키지 않은 파일 및 패키지 명을 변경하는 이슈를 받고 master로부터 새 브랜치(new-branch)를 파서...


package com.example.test.testpackage;

public class TestClass {

}


이렇게 수정하고 push하고 PR까지 올렸다.



merge 승인받을 때까지 다른 이슈를 처리해야지! 하고 이제 다시 master로 switch해볼 것이다.
git switch master

그럼 이런 오류를 볼 수 있다. new-branch(현재 브랜치)에는 TestClass.java가 있지만 master 브랜치에는 testclass.java가 있기 때문에 브랜치 이동이 불가능한 상황이다.

참고 1

이것저것 하면서 local의 master를 삭제했기 때문에 원격의 master를 추적하는 로컬 master 브랜치를 생성하면서 switch하기 위해 위의 캡쳐본에서는 checkout을 사용한 것이다. 로컬 기준 특정 파일명이 현재 브랜치와 이동할 브랜치 간 다르면 똑같은 에러를 볼 수 있을 것이다.





이럴 때는 HEAD의 위치를 조정하여 이동할 브랜치와 현재 브랜치의 파일명 대소문자를 맞춰줘야 한다.

현재 new-branch의 HEAD는 '컨벤션 지킨 클래스명' 에 있다. (new-branch와 origin/new-branch가 보이는데 로컬 기준으로 봐야하기 때문에 new-branch의 위치를 봐주면 된다.)





이제 HEAD의 위치를 master로 변경하여 현 브랜치와 이동할 브랜치를 맞춰줄 것이다.

git fetch --all
git reset --hard origin/master

브랜치 이동이 제대로 된 것을 확인할 수 있다.





참고 2

reset --hard의 대상은 원격 브랜치든 로컬 브랜치든 상관 없다. 이동하고 싶은 브랜치 기준으로 HEAD를 맞추는 데에 중점을 두면 될 것 같다.

참고 3

혹시 대소문자 변경 이슈를 처음 하는거라면... git config core.ignorecase false 이 설정 한 번 해야 변경된 이름이 반영되는 것 같다.
git이 파일 혹은 폴더 이름을 🐶 무시할 때

profile
Coding Duck

0개의 댓글