일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 소비통장
- 방송대
- vmware workstation player
- git
- 런던뮤지컬
- Spring Boot
- 아임포트
- 티스토리챌린지
- 취성패
- github
- git 설정
- java
- git pull
- 취업
- snake case
- IAMPORT
- 정처기
- window10
- json string
- 운영체제
- 방통대
- window11
- 자바
- git pull --rebase
- 오블완
- 윈도우10 Education
- camel case
- window11 Education
- window10 Education
- ObjectMapper
- Today
- Total
홍차의 미로찾기
[git] 여러 건의 커밋 충돌 git pull --rebase 하기 (vsCode) 본문
[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건의 커밋 존재
- 로컬
- 2건의 커밋 존재
- test.txt 파일 수정한 커밋 1건
- second.txt 파일 수정한 커밋 1건
- 원격의 커밋 2건은 아직 당겨오지 않음
- 당겨 올 경우, 두 건의 커밋 충돌 발생
- 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를 확인해보면 아래와 같습니다.
'프로그래밍 > GIT' 카테고리의 다른 글
[github] git SSH 연결 비밀번호 재요청 이슈 (1) | 2024.11.07 |
---|---|
[git] 깃 커밋 당겨오기 - git pull (0) | 2024.07.23 |
[git] 원격 repository에 local 커밋 업로드 - git push, git push origin main, 강제 push (0) | 2024.07.22 |
[git] github 레포지토리(repository) 연결/조회/해제 명령어 - remote add, remove (0) | 2024.07.22 |
[git] github repository local에 가져오는 방법과 (git clone) git remote add 차이 (0) | 2024.07.22 |