최신버전이 아닌 원격 저장소에 git push 시 충돌 대응

김도형·2022년 12월 18일
0

개요

다른 사람이 push 하여 먼저 원격 저장소에 push 하여, 본인이 작업 브랜치를 원격 저장소 push 가 거부된 상황이다.(즉, 내 로컬에 있는 버전이 최신버전이 아니기 때문에 git 에서는 현재 원격 저장소에서 최신버전을 pull 받고 다시 push 하라는 의미)

해결 방법

원격 저장소를 다시 pull 받으면 해결된다.
아직 git 이 익숙하지 않아 연습이 필요하다면, 아래 "push 충돌 예시"를 따라하면 된다.

git pull origin [원격 저장소]

push 충돌 예시

  1. testBranch 작업 브랜치를 형성 후 fff.txt 라는 파일 생성
  2. fff.txt add 후 commit
$git branch testBranch 
$git add fff.txt
$git commit -m "add fff.txt"


3. push 할 원격 저장소 dev 에 ggg.txt 라는 파일을 추가한다.(추가를 하게 되면 [작업 시점 dev 버전 != 최신 dev 버전])

Create new file 들어가서 ggg.txt 생성 후 commit 해주면 dev에는 ggg.txt 파일이 추가된다

4. testBranch -> dev 브랜치 변경 후, testBranch merge 하고 원격 dev 에 push 한다.

$git checkout dev
$git merge testBranch
$git push origin dev 

push 이후 에러가 발생한다. 여러 힌트들이 나오는 데, 에러가 발생하는 이유는 처음에도 말했듯이 최신 dev 버전에 맞지 않아, 다시 원격 최신 dev pull 받은 후 작업하라는 내용이다.

5. 최신 버전 dev를 pull(pull 은 단순히 프로그램을 받는 것 뿐만 아니라 merge 까지 확인해준다)

$git pull origin dev 

위 명령어를 실행하면 왜 merge 가 필요한지 commit 메시지에 내용을 적으라는 내용이다.

아래 순서대로 한다. 본인 message Merge branch 'dev' of https://github.com/Daniel0915/GitPractice into dev
내용 대신 "충돌 해결" 이라고 적었다.


a. i를 누른다 (commit message를 입력하기 위해)
b. merge에 대한 message를 입력한다.
c. esc를 누른다.
d. :wq를 입력한다.
f. enter를 누른다.
[참고 블로그 : https://velog.io/@ssmin0606/%EA%B0%9C%EB%B0%9C%ED%88%B4-Please-enter-a-commit-message-to-explain-why-this-merge-is-necessary-especially-if-it-merges-an-updated-upstream-into-a-topic-branch-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0-git-bash]

그러면 "충돌해결" 이라는 commit 이 한 개 더 생기게 된다. 총 2개의 커밋이 생성됐다.

  • add eee.txt
  • 충돌해결
  1. 이제 내 로컬의 dev도 최신이기 때문에, push 충돌이 나지 않는다.
$git push origin dev 
profile
3년간 웹/앱, 자동제어 QA 🔜 개발자로 전향하여 현재 교육 회사에서 백엔드 개발자로 근무 중입니다.(LinkedIn : https://www.linkedin.com/in/dohyoung-kim-5ab09214b)

0개의 댓글