홍차의 미로찾기

[git] 여러 건의 커밋 충돌 git pull --rebase 하기 (vsCode) 본문

프로그래밍/GIT

[git] 여러 건의 커밋 충돌 git pull --rebase 하기 (vsCode)

홍차안디 2024. 7. 23. 17:33
반응형

[git/github] git, github설정 프로세스 모음

 

 

 

 

두 개의 파일이 존재한다고 해보겠습니다.

 

- test.txt

- second.txt

 

원격에서 먼저 두개의 파일을 각각 변경해서 커밋합니다. (다른 개발자가 먼저 커밋 후 push한 상황)

- 'remote commit 1' 커밋 건 -> test.txt 파일 수정

- 'remote commit 2' 커밋 건 -> second.txt 파일 수정

 

위와 같이 현재 원격의 버전은 'remote commit 2'에 존재하는 상황이고, local main은 원격의 변경사항을 가져오지 않았습니다.

 

이제 local에서 두 개의 파일을 각각 변경해서 2개의 커밋 건을 만들겠습니다.

# test.txt 수정 후 커밋
git commit -am 'local commit 1'

# second.txt 수정 후 커밋
git commit -am 'local commit 2'

 

현재 커밋 상황은 아래와 같습니다.

  • 원격
    • 2건의 커밋 존재
      • test.txt 파일 수정한 커밋 1건
      • second.txt 파일 수정한 커밋 1건
  • 로컬
    • 2건의 커밋 존재 
      • test.txt 파일 수정한 커밋 1건
      • second.txt 파일 수정한 커밋 1건
    • 원격의 커밋 2건은 아직 당겨오지 않음
      • 당겨 올 경우, 두 건의 커밋 충돌 발생

 

 

 

위 상황에서 pull rebase 방식으로 커밋을 당겨와 해결하고 push를 해보겠습니다.

 


 

 

우선, push를 시도해보겠습니다.

git push

 

아래와 같이 오류 메시지가 나옵니다.

원격과 버전이 달라 pull해야한다는 의미입니다.

 

이제 pull을 rebase 방식으로 가져와보겠습니다.

rebase 방식은 기존의 원격 커밋 버전을 모두 가져오고, 그 버전 이후로 local 버전 커밋들을 이어서 추가하는 방식입니다.

 

git pull --rebase

 

명령을 실행하면, 아래와 같은 메시지가 뜹니다.

test.txt 파일에서 충돌이 발생했다는 의미입니다. 

해당 파일에서 로컬의 내용으로 병합하고 진행해보겠습니다.

 

vsCode에서 아래와 같이 test.txt 파일이 충돌됐다고 느낌표가 뜹니다.

해결 방식은 두 가지 입니다.

 

1. test.txt 파일을 직접 타이핑해서 수정 -> git add .

2. 'Resolve in Merge Editor' 버튼 클릭해서 병합

 

 

저는 첫번째 방식을 사용해보겠습니다.

 

로컬 작업 내용으로 파일을 수정하고 저장합니다.

그리고 아래 명령을 실행합니다

git add .

 

위 명령을 실행하면 파일 명 옆에 있던 느낌표가 사라집니다.

 

rebase 방식으로 병합을 계속 진행합니다.

git rebase --continue

 

이제 아래와 같이 commit vi 편집화면이 나옵니다.

commit 메시지는 제가 local에서 첫번째로 커밋했던 커밋 건의 메시지가 자동으로 입력됩니다.

:wq 로 저장하고 나옵니다.

 

:wq 를 입력하고 편집화면을 나오면, 이제 두 번째 커밋 충돌 건을 해결해야합니다.

second.txt 파일 옆에 느낌표가 생겼습니다.

 

 

이번에는 'Resolve in Merge Editor' 버튼을 클릭해서 충돌을 해결해보겠습니다.

 

저는 incoming 버전 (로컬 커밋 버전)으로 병합하겠습니다.

받아들일 버전 선택 후, 'Complete Merge' 버튼을 클릭합니다.

 

해당 버튼을 클릭하면, second.txt 파일 옆의 느낌표가 사라집니다.

 

병합이 완료되었으니, rebase 를 계속 진행합니다.

git rebase --continue

 

첫번째 커밋 충돌 건과 동일하게 이번에도 커밋 메시지 창이 뜹니다.

로컬에서 두 번째로 커밋했던 'second commit 2' 메시지가 자동으로 뜹니다.

:wq 로 저장 후 나가기.

 

아래와 같이 더 이상 충돌 나는 파일이 없습니다.

 

로그를 한 번 확인해보겠습니다.

git log --all --oneline --graph

 

아래 이미지와 같이, 원격의 버전 이후로 로컬 커밋 두 건이어서 한 줄로 붙어 있는 것을 확인할 수 있습니다.

 

이제 로컬의 변경내역을 원격으로 업로드해보겠습니다.

git push

 

위 명령어 실행 이후, 다시 한 번 log를 확인해보면 아래와 같습니다.

 

반응형
Comments