현재 내 커밋은 내 fork레포에만 있다. 내가 수정한 코드를 공식 레포에 올려달라고(Merge) 요청해야한다(Pull request). 하지만 내가 코드수정하는 동안 또다시 공식레포의 base가 달라질수있다. 따라서 pr전에 merge충돌을 방지하기 위해서 rebase한 뒤 내 커밋을 얹어서 함께 push해야한다.
# 공식 upstream 저장소에서 최신 commit history가져오기 $ git fetch upstream master
# 최신 comit history 기준으로 베이스 갱신 = rebase 감기 $ git rebase upstream/master
# 충돌 상황확인하기 $ git status $ git diff
# 충돌부분 수정후 add하기 $ vi 수정할려는파일명(GIT BASH상에서) 또는 IDE상에서는 패널에 파일열어서 수정가능 $ git add 수정할려는파일명
# rebase 풀기 $ git rebase --continue
# 내 fork한 레포에 최신 master브랜치에 가져온 commit내용 갱신하기 $ git checkout master $ git reset --hard upstream/master $ git push origin master -f
공식저장소에 PR하기
1 2 3 4 5 6 7 8 9 10
# PR 하기 두가지방법 # 첫번째 : 추천방법 $ git push origin 브랜치명 # PR 하기 예시 : master 브랜치인 겨우 $ git push origin master -f
# 두번째 : PR시 force push(강제푸시)사용 # 두번째 방법을 이용하면 내 fork한 저장소가 수정되면서 PR자동갱신된다. 따라서 아래 7번8번을 생략할수있다. # 강제푸시이므로 팀프로젝트에 이용시 꼬일 수 있다 $ git push --force origin master
fork한 저장소가 꼬인 경우는 로컬에서 잘 정리해서 force push(강제푸시)를 쓰면된다. 나혼자 쓰니까 괜찬.
하지만 다같이쓰는 저장소는 절대 force를 쓰면 안된다.
origin의 의미
수업중 질문 : origin은 master처럼 기본적으로 지정된 폴더 이름인가요? origin이 어떤 의미를 가지는지 알고싶습니다 답변 : origin이나 upstream은 remote repository에 붙이는 이름표같은거라고 생각하시면되요. 그런데 대부분의 튜토리얼들이 fork뜬 저장소는 origin으로, 원본 저장소는 upstream이라고 식별한걸 가정하고 진행되기때문에 미리 알아두시는게 좋구요