-
[Git] 예전에 fork한 repo를 원래 repo의 최신 버전으로 업데이트하기공부/Git 2022. 7. 16. 14:31반응형
한 달 전에 fork 했었던 repo를 최신 버전으로 업데이트 해야하는데, 아침까지 내가 이전에 보냈던 커밋들과 뒤섞인 상태로 업데이트가 되어 이상한 상태였었다. 옛날에 보낸 커밋(2 commits behind)과 최신 버전으로 merge할 때 추가된 커밋(3 commits ahead)이 있는데, 옛날에 보낸 커밋은 이미 원래 repo에 반영이 됐어서 PR을 날리면 파일은 바뀐게 없지만 5개의 커밋 메시지를 보낼 수 있는 상태였다.
* 예시 상황
1. kauKoala라는 유저의 algorithm-study repo에서 내 아이디인 70825에 fork를 한 상황
2. main 브런치는 바로 최신 버전으로 업데이트하면 된다.
3. develop 브런치가 꼬인 상황이다. (2 commits behind, 3 commits ahead)
4. behind 커밋은 repo를 최신 버전으로 업데이트 해야한다.
5. ahead 커밋은 커밋을 삭제해서 최신 버전으로 돌린다.
1. upstream 설정하기
$ git remote -v
위 명령어를 입력하면 아래와 같이 나온다.
origin https://github.com/70825/algorithm-study.git (fetch) origin https://github.com/70825/algorithm-study.git (push)
우리는 최신 버전을 가져와야하므로 원래 repo의 주소를 upstream으로 설정한다.
$ git remote add upstream https://github.com/kauKoala/algorithm-study.git (git remote add upstream <원래 repository git 주소>
이후 다시 git remote -v를 입력하면 upstream으로 새로운 내용이 생겼을 것이다.
$ git remote -v origin https://github.com/70825/algorithm-study.git (fetch) origin https://github.com/70825/algorithm-study.git (push) upstream https://github.com/kauKoala/algorithm-study.git (fetch) upstream https://github.com/kauKoala/algorithm-study.git (push)
2. main 브런치를 최신 상태로 업데이트하기
현재 브런치가 main 브런치인지 확인하자 지금 main 브런치가 아니라면 이동을 한다.
$ git checkout main
이제 git에서 fetch and merge를 하여 최신 상태로 업데이트한다.
$ git fetch upstream $ git merge upstream/main
만약 업데이트를 하기 전 마지막 커밋 아이디가 abcdefg이고, 원래 최신 커밋이 1234567이면 아래 메시지가 나왔을 것이다.
$ git push abcdefg...1234567 main -> main
이렇게 해서 main 브런치는 최신 버전으로 업데이트하였다.
3. develop 브런치를 최신 상태로 업데이트하기
2 commits behind를 없애는 방법이다. 이것도 main 브런치때와 비슷하게 적용하면 된다.
$ git checkout develop $ git fetch upstream $ git merge upstream/develop $ git pull
이러면 behind가 없어지고 최신 repo로 변경된 상태이다.
git pull을 하는 이유는 내가 fork한 repo가 원래의 repo보다 3개의 커밋이 추가로 있기 때문이다.
이제 3 commits ahead만 해결하면 된다.
4. develop 브런치에 있는 커밋 삭제하기
해당 커밋은 아예 필요가 없는 것이므로 원래 repo의 커밋으로 돌아가야한다.
원래 repo의 최신 커밋이 a1b2c3라고 가정하자
그러면 git reset --hard <돌아가고 싶은 커밋>을 사용하면 된다.
돌아가고 싶은 커밋 이후에 추가로 생긴 소스 코드를 남기고 싶으면 --hard 대신 --soft를 사용하면 된다.
$ git reset --hard a1b2c3
a1b2c3으로 돌아갔으면 force push를 해주면 된다.
$ git push -f origin develop
이러면 모든 문제가 해결되었다.
반응형'공부 > Git' 카테고리의 다른 글
[Git] conflict가 일어날 때 리포지토리 최신 버전으로 복구하기 (0) 2022.07.28 [Git] ORIG_HEAD 오류 해결 (0) 2022.07.27 [Git] 가장 최근에 push한 커밋 메시지 수정하기 (0) 2022.07.21