ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] conflict가 일어날 때 리포지토리 최신 버전으로 복구하기
    공부/Git 2022. 7. 28. 14:52
    반응형

     

     

     

    merge 커밋이 너무 보기 싫어서 위 사진처럼 합체를 해놨더니 fork한 repo 상태가 이상해졌다.

    이번엔 upstream으로 fetch and merge를 진행해도 중간에 conflict가 일어나서 복구하기가 힘들길래 그냥 처음으로 되돌려버려서 업데이트를 진행했더니 정상적으로 돌아왔다.

     

    상황을 간단하게 설명하면 아무리 고쳐봐도 위 상태가 그대로였는데, 아래 사진처럼 최신 상태로 업데이트하는 것이다.

     

     

     

     

    해결 방법


    $ git remote -v

    먼저 원본의 리포지토리를 가지고 업데이트를 해야하니 위 명령어를 통해 내 저장소를 확인해보고 upstream이 없다면 추가해준다.

     

    $ git remote add upstream https://github.com/kauKoala/Algorithm-Study-7th.git
    $ git remote add upstream <원본 repo의 git 주소>

     

    이후엔 reset --hard를 통해 최초의 커밋으로 돌아가고, 이후의 커밋에 등록된 코드를 모두 삭제한다. 굳이 최초의 커밋이 아니더라도 돌아가서 fetch and merge를 해도 문제가 없는 커밋으로 돌아갈 수 있으면 상관이 없다.

    $ git reset --hard f4fbbad
    $ git reset --hard <돌아가고 싶은 커밋>

    리포지토리를 업데이트 해야하므로 push -f를 통해 깃허브에 있는 리포지토리를 덮어씌운다.

    $ git push -f origin main
    $ git push -f <remote 이름> <branch 이름>

    이후에 깃허브를 확인해보면 아래 사진처럼 처음으로 돌아갔다.

    이제 업데이트를 할 일만 남았다.

     

     

     

    먼저 Conflict가 일어나므로 clean을 사용하여 untracked files를 모두 삭제한다.

    $ git clean -d -f -f

    -d가 untracked files를 삭제하는 것이고, -f는 강제로 수행한다는 뜻이다.

     

     

    이제 upstream 저장소에 있는 코드로 fetch and merge를 수행한다.

    $ git fetch upstream
    $ git fetch <업데이트에서 참고하는 remote 이름>
    
    $ git merge upstream/main
    $ git merge <업데이트에서 참고하는 remote 이름>/<업데이트하는 branch 이름>

     

    다시 덮어쓰기를 하면 된다.

    $ git push -f origin main
    $ git push -f <remote 이름> <branch 이름>

     

     

    이러면 해결할 수 있게 된다.


     

    반응형

    댓글

Designed by Tistory.