배경
- 현재 나는 선배의 레포지토리에서 새 브랜치를 파서 거기에 바로 커밋하고 있다.
- 깃허브 명령어가 아직 익숙치 않아서 깃허브 데스크탑 앱을 사용한다.
상황1
상황설명
- 나는 이번주에 날짜_2pir 브랜치에서 작업 중이었다. (브랜치명은 그냥 예시이다.)
- 나는 화요일에 작업을 하다가 커밋을 하지 않고 퇴근했다. (디버깅을 다 못 끝내서 다음 출근 때 해결하고 커밋할 생각이었다.)
- 수요일에 선배가 날짜_2pir 브랜치를 날짜_merge 브랜치에 머지했다. (선배의 작업 + 월요일까지의 내 작업이 합쳐졌다.)
- 목요일에 출근한 나는 당황했다. 내 화요일 작업(아직 커밋하지 않은 작업)을 유지하면서, 날짜_merge 브랜치를 pull한 후 작업해야 했다.
접근
pull : fetch + merge를 한 번에 하는 명령어이다.
그런데 (로컬) 날짜_2pir 브랜치에 (원격) 날짜_merge 브랜치를 pull하는 방법을 모르겠다. 그러니까 fetch랑 merge를 따로 해보자!
해결방법
1. 내 작업 commit
- 침착하자. 일단 작업하던 브랜치에서 내 화요일 작업이 날아가지 않도록 커밋한다.
- 커밋 안 하고 브랜치 이동하면 작업내용이 날아가니 주의. 다행히도 깃허브 데스크탑은 친절하게 팝업창을 띄워서 '너 이러면 작업내용 다 날아가는데 정말 이동할 거니?'하고 물어봐준다.
- 자, 작업을 커밋해뒀으니 어떻게 되어도 나중에 복구할 방법이 있을 것이다. 안심! 이것만 해도 반절은 해낸 셈이다!
2. 상대 작업 fetch
- origin/날짜_merge 브랜치로 이동한다.
- 이때 자동으로 fetch가 되는 것 같다. (나는 fetch를 누른 기억이 없다.) 내 로컬에 날짜_merge 브랜치가 생겨있더라.
- 날짜_merge 브랜치는 로컬 브랜치, origin/날짜_merge 브랜치는 원격 브랜치다.
3. 2를 내가 작업 중인 브랜치에 merge
- 다시 날짜_2pir 브랜치로 이동한다.
- 상단바에서 Branch(Help 왼쪽에 있다.)
→ Merge into current brach 클릭
→ 어떤 브랜치를 가져올지 선택 (여기서는 날짜_merge 브랜치)
→ 아래에 파란색 create a merge commit 버튼 클릭해서 머지하기.
상황2
상황설명
- 이렇게 머지를 잘 하고 뿌듯해하고 있는데 선배가 부른다. 날짜_merge에 새 작업 커밋해놨으니까 그것까지 pull해서 작업해요.
- 날짜_merge 브랜치를 머지해서 가져오려니까
원인
- 선배가 말한 날짜_merge 브랜치는 원격 브랜치이다. 깃허브 데스크톱에는 origin/날짜_merge로 적혀있다.
- 내가 머지하려고 시도한 브랜치는 로컬 브랜치다.
- 이 로컬 브랜치에는 아직 선배의 새로운 작업이 반영되지 않았다.
해결방법
- fetch부터 하면 된다.
- 날짜_merge 브랜치(로컬)로 이동한다.
- 깃허브 데스크톱에서 fetch 버튼을 눌러준다.
- 날짜_2pir 브랜치(로컬)로 이동한 후 다시 merge를 시도한다.