(vscode 사용함) 코드 작성을 다 완료하고 커밋을 할려했으나 해당 문제 때문에 커밋이 안되는 현상이 있다.
이유: "로컬 지점이 원격 지점에 대해 알지 못합니다. 로컬 지점(마스터)이 원격 지점(이 경우에는 오리진/마스터)과 자신을 비교해야 한다고 git에 말하지 않으면 git 상태는 지점과 원격 지점의 차이점을 알려주지 못합니다. 따라서 다음을 사용해야 합니다." 라고 stack over flow에서 말하였다.
상태를 보면 이러하다
On branch main
Your branch is up to date with 'origin/main'
changes to be commited:
(use "git restore --staged <file>..." to unstage
modified: fronted/css/main.css 라고 뜬다
그리고 다시 comit하니 작동이 원활하게 됐다?
다만 푸쉬할때 문제가 생겼다
해당 문제는 git push하기 전에 git pull을 다시 하라고 한다.
일단 git pull --rebase origin main 명령어는 로컬 저장소의 현재 브랜치에 원격 저장소(origin)의 main 브랜치의 최신 변경 사항을 가져오면서, 병합 대신 리베이스(rebase)를 사용하는 방식입니다. 이 명령어는 주로 커밋 히스토리를 보다 깔끔하게 유지하기 위해 사용된다.
리베이스와 병합의 차이
- 병합(Merge): 두 브랜치의 히스토리를 합쳐서 하나의 새로운 커밋을 생성합니다. 이 과정에서 병합 커밋이 만들어져 히스토리가 복잡해질 수 있다.
- 리베이스(Rebase): 한 브랜치의 커밋을 다른 브랜치의 끝에 적용하여 커밋 히스토리를 재정렬합니다. 이를 통해 직선형의 깔끔한 히스토리를 유지할 수 있다.
git pull --rebase origin main의 동작
- 원격 저장소(origin)의 main 브랜치에서 최신 변경 사항을 가져온다.
- 로컬 브랜치에서 현재 작업 중인 커밋을 잠시 저장(stash)해둔다.
- 로컬 브랜치가 원격 main 브랜치의 최신 커밋을 가리키도록 업데이트한다.
- 저장해둔 로컬 커밋을 원격 main 브랜치의 최신 커밋 위에 하나씩 재적용한다.
예시
git checkout feature
# 'feature' 브랜치에 'main' 브랜치의 최신 커밋을 리베이스
git pull --rebase origin main
이 명령어를 실행하면 feature 브랜치는 main 브랜치의 최신 커밋을 포함하고, 이후 feature 브랜치의 커밋들이 main 브랜치의 최신 커밋들 위에 재적용된다. 이 과정에서 잠재적인 충돌이 발생할 수 있으며, 충돌이 발생하면 이를 수동으로 해결해야 한다.
장점
- 커밋 히스토리가 보다 깔끔해진다.
- 협업 시 변경 사항을 추적하기 쉽다.
단점
- 충돌이 발생하면 이를 수동으로 해결해야 한다.
- 리베이스 과정에서 커밋 해시가 변경되므로, 다른 사람과 협업 중이라면 주의가 필요하다.
이와 같은 특징들 때문에 git pull --rebase origin main 명령어는 팀의 워크플로우와 상황에 따라 적절하게 사용해야 한다.
리베이스를 사용한후 git push origin main 하니 에러 없이 github에 잘 전송된 결과를 볼 수 있다.
'GitHub 오류 및 명령어 정리' 카테고리의 다른 글
git config pull.rebase true (0) | 2024.09.25 |
---|---|
git pull을 해야하는데 오류가 난다면? (0) | 2024.08.06 |
git branch, switch,checkout, merge (0) | 2024.08.01 |
다른 사람의 파일을 받아 내 git에다가 push하기(Mac 기준) (1) | 2024.07.24 |
git 기초 명령어 모음 (0) | 2024.07.15 |