원인파악
형상 관리 시스템인 git을 사용하면 여러명이 한 개의 프로젝트를 참여할 수가 있다.
그래서 git을 사용하면 다른 사람과의 소스 충돌이 발생하는 경우가 있다.
git push origin master
git에 add도 하고 commit도 하고 이제 push를 하려고 한다.
이 때 아래와 같은 상황이 발생하는 경우가 있다.
// ${git_src} 는 회사 git 소스라서 변수로 바꿔서 표현했다.
To ${git_src}
! [rejected] master -> master (fetch first)
error: failed to push some refs to ${git_src}
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
위 상황이 발생하는 이유는 내가 반영하려는 원격 저장소의 변경사항이 나의 로컬 저장소에 없어서 발생하는 경우다
무슨 상황이냐면
내가 반영하려는 원격 저장소가 다른 사람의 커밋으로 업데이트가 되서 충돌을 방지하기 위해서
git에서 push를 거부하는 상황인 것이다.
어떻게 해결을 해야할까?
hint에도 다 설명이 되어있지만 ㅎㅎ 정리를 해보자
업데이트 된 원격 저장소의 변경 사항을 나의 로컬 저장소에 통합한 다음에 다시 푸시를 하면 된다.
cli 로 설명하면 다시 pull 하면 된다.
git pull origin master
다시 소스를 pull하게되면 아래와 같은 상황이 발생할 것이다.
// 참고로 현재 활성화된 편집기는 nano
Merge branch 'master' of ${git_src}
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
git pull 명령어를 사용하게 되면 자동으로 뜨는 메시지이니 안심해도 된다.
원격 저장소와 로컬의 merge하는 과정에서 커밋 메시지를 입력하는 의미다
통상 vim랑 nano로 열리는데 아래와 같이 진행하면 된다.
vim
1. i 를 눌러서 insert 상태로 진입
2. 위에서 보여진 커밋 메시지 입력( ex. Merge branch 'master' of ${git_src} )
3. esc로 insert 상태 나오기
4. :wq 타이핑 후 enter 눌러서 저장 후 종료
> 이 때 vi를 처음 쓰는 분들이 있을 수도 있어서 알려드리자면 wq 가 아닌 : (콜론) 이 붙어야 합니다
Nano
1. 위에서 보여진 커밋 메시지 입력( ex. Merge branch 'master' of ${git_src} )
2. Ctrl + o 눌러서 파일을 저장
3. Enter 눌러서 파일 이름 확인
4. Ctrl + x 눌러서 nano 종료
위와 같이 진행 후에 다시 git push 하면 된다.
커밋메시지는 똑같지 않아도 되고 본인이 반영해야하는 소스에 대한 설명으로 적어야겠죠?! ㅎㅎ
그럼 수고하세요

'개발기록 > Git' 카테고리의 다른 글
삭제된 파일을 Git에 반영하는 방법(이렇게 쉽다니) (0) | 2024.03.04 |
---|