! [rejected] main -> main (non-fast-forward)
이 에러는 보통 로컬 저장소와 원격 저장소의 커밋 히스토리가 일치하지 않을 때 발생합니다. 이는 주로 다른 사람이 변경한 내용을 로컬에 반영하지 않고, 로컬에서 새로운 커밋을 만들어 원격 저장소에 푸시하려 할 때 발생합니다.
이 문제를 해결하기 위해서는 먼저 원격 저장소의 최신 변경사항을 로컬로 가져와야 합니다. 그 후, 자신의 변경사항을 원격 저장소에 푸시할 수 있습니다.
다음은 이를 위한 기본적인 단계입니다:
git pull origin main
: 이 명령어를 사용하면 원격 저장소의 'main' 브랜치에서 변경된 사항들을 현재 작업 중인 브랜치로 가져옵니다.git add <filename>
과 git commit -m "Resolve merge conflict"
등으로 충돌 해결 후 커밋해야 합니다.git push origin main
: 이제 원격 'main' 브랜치에 자신의 변경사항들을 푸시할 수 있습니다.위 과정은 가장 기본적인 방법으로, 상황에 따라 약간 다르게 처리해야 할 수도 있습니다. 예를 들어, 작업 중인 브랜치가 'main'이 아니거나 별도의 작업 브랜치를 유지하고 싶다면 좀더 복잡한 절차가 필요할 수 있습니다.
여기서 1번으로 해결해보려고 함 하지만…
jeonhyeon-oui-MacBookAir:Cpp-Programming jeonhyeono$ git pull origin main
<https://github.com/gusdh8380/Cpp-PJ> URL에서
* branch main -> FETCH_HEAD
힌트: You have divergent branches and need to specify how to reconcile them.
힌트: You can do so by running one of the following commands sometime before
힌트: your next pull:
힌트:
힌트: git config pull.rebase false # merge
힌트: git config pull.rebase true # rebase
힌트: git config pull.ff only # fast-forward only
힌트:
힌트: You can replace "git config" with "git config --global" to set a default
힌트: preference for all repositories. You can also pass --rebase, --no-rebase,
힌트: or --ff-only on the command line to override the configured default per
힌트: invocation.
fatal: Need to specify how to reconcile divergent branches.
fatal: Need to specify how to reconcile divergent branches.
이 오류는 로컬 브랜치와 원격 브랜치가 서로 다른 커밋을 가리키고 있어, Git이 어떤 변경사항을 우선적으로 적용해야 할지 결정하지 못할 때 발생합니다.
즉, 로컬과 원격 저장소의 커밋 히스토리가 서로 달라져서 생기는 문제입니다.
아무래도 커밋과 푸쉬를 하는 도중에 로컬과 리모트 리포지트리에 문제가 생긴 것 같다.
vs code에서 다음과 같이 push를 하려고 했지만…어째서인지 git에는 “포인터와 동적 객체 생성” 디렉터리 파일이 생성이 안된 상태에서
staging area에도 안들어가고 커밋은 된 상태였다
해결방법은 다음과 같다.