깃에 로컬에서 작업한 파일들을 올리려고 하니 밑에와 같은 메시지가 나오면서 push가 되지 않았다.
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.
작업한 순서는 이렇다.
1. 깃 레파지토리 생성
2. 깃허브 페이지 내에서 README.md 생성 및 수정
3. 로컬이서 git init -> git add . -> git commit -m "first commit" -> git remote add origin ${주소} -> git push -u origin master
4.이렇게 하니 문제가 있었는데 나는 로컬로 깃허브와 같은 main 으로 하고 싶었다. 그래서 다시 로컬의 브랜치명을 바꾸어주었다.
5. git branch -m master main -> git add . -> git commit -m "hello" -> git push origin main
여기서 바로 위에와 같은
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
메시지가 나왔다.
이해하기 쉽게 표기해보면 위에 에러가 난 이유는 github의 remote origin과 뿌리가 같지 않아서 에러가 났다.
로컬에 있는 데이터들(노란색 데이터)를 깃에 올리고 싶으면 먼저 github origin과 뿌리를 같게 한 다음에 추가로 정보를 올려야 한다.
그러면 해결을 하기 위해 쓴 방법을 공유하겠다.
첫번째 방법
1. git log 로 로그 상태를 본다.
2. 기존에 commit id (로컬에서 작업한 것들을 올린 것) 을 복사해둔다.
3. git fetch --all 을 한다. fetch 를 하면 원격저장소에 있는 커밋들을 로컬로 가져온다.
4. git reset origin/main --hard를 한다. 그러면 내 로컬과 깃에 있는 origin/main이 똑같이 된다.
5. git cherry-pick ${깃 로그 아이디}를 넣으면 기존에 로컬 저장소에 있던 것들이 들어간다. cherry pick의 유래는 바구니에서 좋은 체리만 픽하는 것에서 유래되었다고 한다.
두번째 방법
1. git fetch --all을 한다.
1. git reset origin/main --soft 를 하면 hard와는 다르게 로컬에 있는 것들이 사라지지 않고 origin/main에서 작업한 것들과 같이 있게 된다.
추가 : git 의 origin 브랜치들을 아는 명령어는 git branch --all or git branch -a