원인 : '[rejected] main -> main (fetch first) error: failed to push some refs to'
'git push origin main' 명령을 실행할 때 발생하는 위와 같은 에러는 원격 저장소(Github)와 로컬 저장소 사이의 충돌이나 변경 사항을 동기화하지 않아서 발생하는 에러입니다.
이러한 충돌은 일반적으로 원격 저장소에 업데이트된 변경 사항이 로컬 저장소에 반영되지 않은 경우 발생합니다.
해결 방법
0) 변경 사항 가져오기 (Fetch)
: 'git fetch' 명령을 사용하여 원격 저장소의 최신 변경 사항을 로컬 저장소로 가져옵니다.
이를 통해 로컬 저장소와 원격 저장소 사이의 차이점을 확인할 수 있다.
// 로컬 저장소와 원격 저장소의 차이점 확인하기
git fetch origin
0) 변경 사항 확인하기 (diff)
: 'git diff' 명령을 사용하여 로컬 저장소와 원격 저장소 사이의 차이점을 확인합니다.
이를 통해 어떤 파일들이 충돌이 발생한 지 파악할 수 있습니다.
// 로컬 저장소와 원격 저장소 사이의 충돌 파일 확인
git diff origin[원격저장소] main[브랜치]
1. 변경 사항 병합(merge) 또는 리베이스(rebase)하기
: 충돌이 발생한 파일들을 확인한 후, 변경 사항을 병합(Merge)하거나 리베이스(Rebase)하여 로컬 저장소에 최신 변경 사항을 적용합니다.
일반적으로 'git pull --rebase'를 통해 변경 사항을 가져와 리베이스하여 해결합니다.
// git pull --rebase [원격저장소] [브랜치]
git pull --rebase origin main
2. 변경 사항 커밋(commit) 및 푸시(push)
: 변경 사항을 확인하고 충돌을 해결한 후, 커밋하고 원격 저장소(Github)에 Push 합니다.
git add . // 변경된 파일들을 스테이징합니다.
git commit -m "Resolve conflicts" // "message" 커밋 내용 작성
git push origin main // 커밋한 변경 사항을 원격 저장소로 푸시합니다.
git push를 실행하면 충돌 에러가 해결되어 정상적으로 원격 저장소에 변경 사항이 반영됩니다.
git pull은 기존에 작업했던 내용은 유지하면서 최신 코드로 업데이트할 수 있습니다.
단, 원격 저장소의 내용을 가져와서 현재 브랜치와 병합(merge)해주기 때문에 commit을 미리 하지 않으면 덮어쓰기 에러가 발생할 수 있습니다.
원격 저장소의 메인브랜치에 작업내용 'a, b, c, d'가 있고 로컬저장소의 현재 작업브랜치엔 'c, e'를 작업해 두었다면, git pull명령어를 사용했을 때 메인브랜치에서 'a, b, c, d'을 가져왔음에도 c는 변경내용에 포함되지 않습니다.
만약 c 내용이 메인브랜치와 작업브랜치에서 각각 다르다면 충돌이 발생한다면, 이 때는 직접 충돌 처리를 해주어야 한다.
'Git' 카테고리의 다른 글
[Git] Git reset, revert 이용해서 commit 없애기, 되돌리기 (0) | 2024.11.11 |
---|---|
[Git] Git Merge 사용법, 브랜치 Merge 이해 - Squash, Rebase Merge 정리 (1) | 2024.02.25 |
[Git] Git branch, switch, merge, rebase 사용하기 (1) | 2024.02.05 |
[Git] Git branch 사용법 및 브랜치 관리하기 - git branch, git checkout (0) | 2023.08.12 |
[Git] 깃허브에 폴더 및 파일 올리기 - git 필수 명령어 정리 (0) | 2023.02.07 |