본문 바로가기
개발 Error

[GitHub] 작성한 코드를 다른 브랜치로 이동하기, Can't automatically merge

by doraemin_dev 2025. 2. 17.

dev 브랜치에서 pull 받고,

나의 브랜치 (ex.CNN)으로 이동한 후 수정해야 하는데...

 

dev에서 곧바로 수정해버렸다...

 

dev 브랜치로 바로 올릴 수는 없으니.

 

따로 저장해뒀다가, 

나의 브랜치로 이동한 후,

내용을 불러오자. 그리고 나의 브랜치에 올리자.


1. 현재 dev 브랜치에서 수정된 내용 확인

git status

수정한 파일이 어떤 것인지 확인해.


2. 수정 내용을 스태시(stash) 저장

이제 dev에서 한 수정 내용을 임시로 저장하고, 올바른 브랜치로 옮길 거야.

git stash

이러면 dev 브랜치에서 변경한 내용이 스태시로 저장돼.


3. 내 브랜치로 이동

git checkout [나의_브랜치]

혹시 브랜치가 없으면 생성하고 이동해:

git checkout -b [나의_브랜치]


4. 스태시된 내용 적용

git stash pop

이러면 dev에서 작업했던 내용이 다시 적용돼.

 

에러가 난다면, 아래 '접은 글' 참조.

더보기

지금 stash pop을 실행했을 때 충돌(conflict)이 발생했어. 충돌이 일어난 이유는 app/models/model_main.py 파일에서 dev 브랜치의 기존 변경 사항과 네가 수정한 내용이 겹쳤기 때문이야.

해결 방법:

1. 현재 상태 확인

git status

현재 충돌이 난 파일(app/models/model_main.py)을 확인할 수 있어.

 

2. 충돌 파일 직접 수정

각 충돌 파일을 열어보면, 아래와 같은 구조로 충돌이 표시될 거야:

<<<<<<< HEAD
# 내 브랜치의 코드
=======
# dev에서 온 코드
>>>>>>> stash
  • <<<<<<< HEAD ~ ======= 사이가 내 코드
  • ======= ~ >>>>>>> stash 사이가 dev에서 가져온 코드

이 부분을 직접 수정해서 원하는 코드만 남기면 돼.

 

이런식으로 현재 내 브랜치에 있는 코드가 상단(초록색 부분)에 작성되어 있고,

하단(파란색 부분)은 새로 수정한 stash에 올려뒀던 수정한 코드가 작성되어 있다.

 

둘 중 어떻게 수정할지 고르면 된다. (빨간색 박스 표시해놓은 곳의 4가지 경우 중, 선택하여 클릭하면 된다)

아니면 직접 수정해도 된다. <<< === >>> 이런것들은 지워주면 된다.


요약

  1. git status로 충돌 파일 확인
  2. 충돌 파일 열어서 <<<<<<<, =======, >>>>>>> 사이를 직접 수정
  3. git add [파일명]으로 변경 사항 저장
  4. git commit -m "충돌 해결" 후 git push origin [브랜치명]
  5. (선택) 추가로 git pull origin dev 해서 최신 상태 반영

이제 직접 충돌을 해결하고 나면 문제없이 진행될 거야! 🚀

 

더보기

추가로 git pull origin dev 해야 할까?

지금은 stash pop을 적용하면서 dev 브랜치의 변경 사항이 이미 적용된 상태야.
따라서 충돌을 해결하고 커밋하면 추가로 git pull origin dev를 할 필요 없어.

⚠️ 다만, dev가 계속 업데이트되고 있을 가능성이 있다면, 커밋 후 한 번 더 dev 브랜치를 병합해보는 것도 좋음.

git pull origin dev

만약 또 충돌이 발생하면 위와 같은 방식으로 다시 해결하면 돼.


5. 커밋 & 푸시

git add .
git commit -m "올바른 브랜치에서 수정 반영"
git push origin [나의_브랜치]

6. dev 브랜치 원상 복구 (필요한 경우)

dev 브랜치에 변경사항이 남아있지 않도록 깨끗하게 정리할 수도 있어.

git checkout dev
git reset --hard origin/dev

(주의: 이 명령어는 dev 브랜치의 로컬 변경사항을 전부 되돌려!)


이제 dev 브랜치는 원래 상태로 되돌아갔고, 수정한 내용은 내 브랜치에 잘 들어갔을 거야. 🚀

 


 

내 브랜치에 올렸고, 이제 dev로 올리기 위해 merge 하려니..

Can't automatically merge 🥲🫠

 

 

직접 수정하면 된다. <<< === >>> 이런것들은 지워주면 된다.

 

 

이제 Merge pull request 가능하다! 클릭!

 

끝~~~~!

 


🤷‍♀️(참고) 내 코드 stash에 두고, 다른 브랜치의 내용 pull 받아오기

https://doraemin.tistory.com/132

 

[GitHub] Git에서 최신 내용을 가져오면서, 로컬에서 수정하던 코드와 병합

현재 브랜치에서 변경 사항을 유지하면서 최신 dev 브랜치의 내용을 가져오는 방법✅ 최신 dev 브랜치의 내용을 가져오는 방법1. 변경 사항을 임시 저장(stash)한 후 dev 브랜치의 최신 내용 가져오

doraemin.tistory.com