error: src refspec main does not match any
error: failed to push some refs to 'github.com:Stella-Kwon/project.git'
원인 :
원격저장소에 아무 파일도 같은 것을 찾을 수 없고, 즉, 기존파일이 이미 원격저장소에 올라가져있기 떄문에, 파일 삭제 및 훼손을 막기 위해 push 할 수 없게 만듬.
해결방법은 :
1. 다시 레포지토리를 클론하여 다시 실행.
또는
2. 이것도 똑같은 방법인데 더 복잡한.. 깃 폴더를 아에 삭제한 후 그냥 다시 깃을 생성시켜 시작.
rm -rf .git/
git init
git add .
git commit -m "mess"
git remote add origin "깃헙레포지토리주소"
git push origin master
일단 에러는 :
fatal: could not lookup name for submodule 'project'
원인:
submodule 디렉토리만 지우게되면서, 제일 상위 .git/에는 submodule정보가 그대로 남아있게 되면서 git command를 사용하게되면서 생기는 문제
해결방안 :
1. git rm --force <submodule path>
git rm -rf <submodule path>
해도 해결이 안되고 같이 반복되는 에러가 나오면
GIT_DIR/modules// 안에 아직 남아있어 수동적으로 지운다면 가능하겠지만,
git rm -r --cached --ignore-unmatch path-to-target/
제일 상위의 .git이 이미 삭제한 submodule 데이터를 지움.
그리고 commit 하면됌. 그리고 추가할거 하고 push.
원래 -> submodule 폴더를 삭제하지말고 하라고 하는 방법이 있는데 추가로 남김
git submodule add https://github.com/<me>/project path-to-target
git submodule deinit path-to-target
git rm path-to-target
git commit-m "Removed submodule "
rm -rf .git/modules/<path_to_submodule>
# git config -f .gitmodules --remove-section submodule.path-to-target 2> /dev/null # 혹시 git v1.8.5 이전이라면를 입력하세요
원인 :
깃이 원격 저장소와 현재 로컬 저장소가 동기화되어 있지 않은 경우
해결 :
git push origin +master
또는
원인 :
- 깃헙의 원격저장소와 로컬 저장소 간의 공통분모가 없는 상태에서 병합하려는 시도에 의해 할때 발생
- .gitignore 파일 또는 README.md파일로 인해 발생.
기본적으로 관련 없는 두 저장소를 병합하는 것은 안되도록 설정되어 있다.
그렇다면 그냥 커밋내용 삭제하고..? 파일을 삭제하면 되지않을까? 그것 외에도 쉬운 방법이있다.
해결방법:
git pull origin (branchname) --allow-unrelated-histories
git push origin +master
하면 푸쉬가 된다!!!
사실 기존작업이 아무 상관없다면 2번방식을 바로 진행해도 무관!
원인 :
깃에서 pull 해도 이젠 merge x, fetch o 되게 설정을 바꿔놓아서
해결 방안:
git config pull.rebase false # merge
=> 이걸 터미널에 치면 바로 머지되고, 커밋이 남아.
아에 전역으로 지정하고 싶다?
=>git config --global pull.rebase false.
지정하고 나면 새로운 브랜치가 있을 경우 3-way-merge를 해주고 없다면 fast-forward로 브랜치를 병합해준다.=> 추후 더 알아보고 하시고
** => git config pull.rebase true #rebase **
이걸해줘야 커밋이 안남아 히스토리가 깔끔. 주로 필드에선 이걸 많이 사용한다.
git config pull.ff only # fast-forward only
"단순 진행(fast-forward)"는 로컬 브랜치에 추가적인 커밋이 없고 원격 브랜치에만 새로운 커밋이 추가된 상황에서 사용된다.. 아에 다른 내용이 로컬에 있다면 이것을 사용하면 안된다.