먼저 갑자기 충돌이 다량 발생하기 시작한 github를 만나 방황하던 나..
미래의 나는 방황하지 않길 바라기에.. 이 글을 씁니다.
일단 기존에 진행했던 방식을 그대로 사용했는데 이상하게 충돌이 많이 발생했다 .
<- 결국 이사단이 나고 만다.
깃박사 Neis(20) 님의 분석 결과 기존의 PR 방식이 바뀌었다고 알려주셨다.
기존 | 현재 |
PR 보낸 commit들 그 상태로 merge | PR 보낸 commit들이 하나의 commit으로 합쳐져 merge |
나는 뭉땡이와 현재 내 코드를 merge 하려니까 자꾸 충돌이 발생한다는 느낌으로 이해했다.
충돌이 나지 않기 위한 방법을 우선순위에 따라 정리해보았다.
예시를 통해 확인해보자🤓
+참고로 이 글에선 rebase를 하지 않습니다.
< 현재 상황 >
현재 나는 local step3에서 구현을 열심히 했다. (최신상태)
git add .
git commit -m " ADD PR 최신 "
git push origin step3
upstream/tami <--- origin/ step3 PR 전송
1️⃣ PR전송 후 바로 merge가 되었을 때 (CLOSED) ✨✨ 가장 best
다음작업 branch 를 만든후 리뷰어에 의해 merge된 상태를 복사 후 그 단계에서 시작
git checkout -b step4 upstream/tami
: step4 브랜치 생성 후 이동하고 upstream/tami 의 상태를 그대로 복사한다
다시 열심히 구현 시작
2️⃣ PR 전송 후 바로 merger가 되지 않았을 때 (OPEN) (아직 의문)
step3 에 머무르며 CLOSED 가 되기 전까지
commit 한건 전부 바로 push 한다
PR 이 오픈 상태이면 바로바로 반영이 되기 때문에, 변경사항을 바로 올려준다 .
그러다 PR (CLOSED) 가 되면 1️⃣ 반복
3️⃣PR 전송 후 바로 merger가 되지 않았고 PR (CLOSED) 후에
step3에서 진행햇을 시( 커밋/푸쉬 있을때 )
-PR CLOSED 후에도 step3에서 개발진전이 많았고 upstream/tami 를 가져온 후에 이것을 얹어서 추가 진행하고 싶다.
*CLOSED 후 진행한 개발상황을 통틀어 개발진전이라 칭하겠다
3️⃣-1) 브랜치 생성
1️⃣과 같이 step4에 upstream/tami 복붙한 상태로 생성한 후에
step3에서 그 이후에 진행했던 개발진전 commit 을 가져온다
git checkout -b step4 upstream/tami
3️⃣-2) 터미널 창을 2개 연다
A에서 upstream/tami 머지된거 이후 (개발진전) 된 git commit들을 pick해 step4에 순서대로 commit 할 것입니다.
A | B |
step3의 git log | step4 터미널 |
upstream/tami 머지된거 이후 (개발진전) 된 git commit들 확인 | git commit들을 pick해 step4에 순서대로 commit |
3️⃣-3) B에서 cherry pick 으로 commit 시작
// git cherry-pick {commit 번호1} {commit 번호2} ...띄어쓰기로 여러개 가능
git cherry-pick 9fa5d133518e915eba413b9d1a910544daaffa80
⚠️주의사항
- merge commit 은 제외한다
연속으로 여러 commit을 한번에 가져올 수 있지만
중간에 merger가 껴있으면 거기까지 해주고 다시 가져와야 함
- 간혹 예외사항이 있음
- 좌측과 같은 경우는 merge임에도 수정사항이 있어 pick을 해줘야 함
예외사항을 구분하는 법은 아직 못찾음 ...
필자는 아래와 같이 오류가 나서 알게 되었다.
➜ fe-w4-martian git:(step4) ✗ git cherry-pick df0718c2159ce883d961a34947efafc4a50b5818
error: Cherry-picking is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: cherry-pick failed
⚠️예외사항 처리
일단 픽 하던걸 일시정지 하고
git cherry-pick --abort
-m을 붙여서 다시 실행하면 성공!
git cherry-pick -m df0718c2159ce883d961a34947efafc4a50b5818
git log
//commit 을 잘 가져왔는디 A와 비교하며 확인해주고
git stash list
//내가 가져온 commit(개발진전)들이 임시로 list에 저장되어 있음을 뜻함
git stash pop
//내가가져온 commit(개발진전)들 적용!
이제 여기서부터 다시 열심히 구현 시작
이렇게 해서 step3에 남아있던 개발진전의 code들을 step4로 가져와주면
다음 PR도 충돌없이 진행할 수 있다.
정 안되면 PR 올린거 가져오지 않는건 어떨까요? ^.^
그리고 이글은 새벽내내 지도해주신 Neis 깃 박사님께 바칩니다.
'⚠️ 오류백과' 카테고리의 다른 글
[github 에러 ]The requested URL returned error: 403 (fatal: unable to access) (0) | 2021.03.16 |
---|---|
깃허브(github) 잔디심기 오류 해결하기! (0) | 2021.03.12 |
git push 오류 error: pathspec '' did not match any file(s) known to git (0) | 2021.03.11 |
Node / Express 오류 - EADDRINUSE, Address already in use (0) | 2021.03.04 |
git conflict(충돌) 처리법 -branch merge시 (0) | 2021.03.04 |
댓글