ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [GitHub] 원격 브랜치 삭제했지만, 로컬 브랜치 남아있는 이유? (feat. vscode)
    협업 Tool/Github 2024. 4. 12. 12:04

    상황 설명 

    GitHub에서 pull request를 하고 사용하지 않은 branch를 삭제했지만 vscode에서는 여전히 branch가 존재했다. 

    Branch가 main 1개만 있는 거 보이시죠 ~
    feature/login만 push 하고 pull request 한 뒤 원격 저장에서 삭제하였지만 로컬 컴퓨터에선 남아 있는 모습

    해결 과정

    git remote prune origin

    git remote prune origin 명령어는 로컬에서 더는 존재하지 않는 브랜치에 대한 참조를 제거하여 로컬 리포지토리를 정리하는 데 사용됩니다. 기본적으로 이 명령은 로컬 리포지토리의 브랜치들 중에서 원격 저장소에 더 이상 존재하지 않는 것들을 제거합니다. 이는 원격 저장소에서 삭제된 브랜치들이 여전히 로컬에서 추적 중인 브랜치로 남아 있는 경우에 유용합니다.

    git remote prune origin을 실행하면 Git은 로컬 리포지토리의 원격 추적 브랜치(원격 저장소의 브랜치를 추적하는 로컬 리포지토리의 브랜치)를 검토하고 원격 저장소에서 삭제된 브랜치에 대한 참조를 제거합니다.

    이 명령은 로컬 리포지토리를 정리하고 원격 저장소와 동기화를 유지하는 데 좋은 방법입니다. 정기적으로 이 명령을 실행하는 것이 좋습니다. 

    아니 근데 왜 로컬에서 안 없어져??????????????

     

    pruned origin/feature/logingit remote prune origin 명령을 실행한 결과 중 하나로, origin 원격 저장소의 feature/login 브랜치가 삭제되었음을 나타냅니다. 이제 해당 브랜치에 대한 로컬의 추적 브랜치 참조가 삭제되었습니다.

    git branch 명령을 사용하여 확인한 후에도 feature/login 브랜치가 여전히 나타나는 경우에는 몇 가지 가능한 이유가 있을 수 있습니다. 몇 가지 이유와 그에 대한 해결 방법은 다음과 같습니다:

    1. 로컬 브랜치가 아직 삭제되지 않았을 경우: git remote prune origin은 로컬에서 원격 브랜치 추적 참조를 삭제합니다. 그러나 이 명령은 로컬 브랜치 자체를 삭제하지는 않습니다. 따라서 feature/login 브랜치가 로컬에서 직접 생성되었다면 git branch -d feature/login을 사용하여 로컬에서 해당 브랜치를 삭제해야 합니다.
    2. 로컬에서 새로운 작업을 한 후에 origin에서 변경이 생겼을 경우: 로컬에서 새로운 커밋을 추가한 후에 원격 저장소의 브랜치가 삭제되었다면, 로컬에 해당 브랜치가 아직 있는지 확인할 필요가 있습니다. 이 경우 로컬에 존재하는 브랜치는 삭제되지 않습니다. 이 경우 git fetch --prune 명령을 사용하여 로컬 브랜치를 업데이트할 수 있습니다. 그러면 원격 저장소의 변경 사항이 반영되고 삭제된 브랜치가 로컬에서도 삭제됩니다.

    3. 다른 사용자가 로컬에 브랜치를 만들었을 경우: 다른 사용자가 로컬에 feature/login 브랜치를 만들었다면, 그 브랜치는 로컬에서 삭제되지 않습니다. 이 경우 해당 사용자에게 로컬 브랜치를 삭제하도록 요청해야 합니다.

    위의 이유 중 하나에 해당하지 않는다면 추가적인 디버깅이 필요할 수 있습니다.

     

    그래서 실행했지만, 오류나다.

    git branch -d feature/login

    wtf 이놈의 오류 왜 계속 나는데? 내가 잘모르니깐 그런거지 내탓이니깐 워워...

    이 오류는 해당 브랜치가 현재 작업트리(working tree)에서 사용 중이기 때문에 삭제할 수 없다는 것을 나타냅니다.

    일반적으로 Git은 현재 작업 중인 브랜치를 삭제하는 것을 허용하지 않습니다.

    해당 브랜치가 현재 작업 중인 브랜치인지 확인하고, 만약 그렇다면 다른 브랜치로 전환한 후에 다시 시도하세요. 아니면 작업트리에서 해당 브랜치를 사용하지 않도록 변경한 후에 삭제할 수 있습니다.

    다음은 오류를 해결하는 두 가지 일반적인 방법입니다:

    1. 다른 브랜치로 전환하기: 해당 브랜치를 현재 작업 중인 브랜치가 아닌 다른 브랜치로 변경한 후에 해당 브랜치를 삭제합니다.

    git checkout <다른 브랜치 이름>
    git branch -d feature/login

    2. 작업트리에서 해당 브랜치 사용 중지하기: 만약 해당 브랜치를 더 이상 사용하지 않는다면, 작업트리에서 해당 브랜치를 사용 중지합니다. 이후에 삭제할 수 있습니다.

    git worktree remove <작업트리 경로>
    git branch -d feature/login

    여기서 <작업트리 경로>는 해당 작업트리의 경로를 나타냅니다.

    이렇게 하면 해당 브랜치를 삭제할 수 있을 것입니다.

    막트( 마지막시도라는 뜻)

     

    오 뭔가 지우려다가 완전히 merged 되지 않았는 데 진짜 원해? 물어보니깐 지우기 싫어졌다. 

    하지만 결과를 내기 위해서 지워보겠다. 

    +(추가 수정) 여기서 완전히 merged 안되는 이유는 아래에서도 나옵니다. 결론 : 동기화를 안했기 때문이다. 

    // 만약 위 과정에서 fully merged가 안됐다고 한다면.
    // 그 이유는 원격 저장소(깃허브)에서는 merge를 했지만, 로컬에서는 merge를 안했기 때문에 뜨는 오류
    // 따라서 main 도 동기화를 해주어야 됨. 
    git pull origin main

     

     

    완전히 지워졌다.

     

    요약

    1. prune 해도 로컬에서 만든 브랜치라면 로컬에서 직접 삭제해야되고

    2. 로컬에서 직접 삭제할 때 주의점은 해당 브랜치를 사용 중이면 안되고

    3. fully merge 되지 않은 경우 git branch -D <브랜치명>을 사용해서 삭제하자.


    ++ 추가 
    이걸 작성하고 그 다음 강의에서 알려주었다.. 그 방법도 기술 하겠음. 

    git branch    // 브랜치 목록 확인
    git branch -r   // 원격 저장소(깃허브) 브랜치 목록 확인
    git fetch -p     // 동기화
    git branch -r     // 원격 저장소(깃허브) 브랜치 목록 확인, 이 때 사라진 걸 볼 수 있음
    git branch      // 하지만 내 로컬에는 아직 남아 있는 걸 볼 수 있다.
    git checkout main    // 현재 벗어나려는 브랜치를 사용중이라면 벗어나는 과정
    // ex) git branch 했을 때 결과가 아래와 같다면, 벗어나자. 
    //    * feature/login    (이건 저의 브랜치입니다. 여러분이 저장하신 브랜치 명 나오실거)
    //      main
    git branch -d feature/login      // 로컬에서도 삭제
    // 만약 위 과정에서 fully merged가 안됐다고 한다면.
    // 그 이유는 원격 저장소(깃허브)에서는 merge를 했지만, 로컬에서는 merge를 안했기 때문에 뜨는 오류
    // 따라서 main 도 동기화를 해주어야 됨. 
    git pull origin main
    git branch -d feature/login      // 동기화하고 다시 삭제 시도 끗~
Designed by Tistory.