git errors -모음

권수민·2023년 8월 9일
1

1. git push 했는데 이러한 에러가 뜰떄

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

2. submodule..? 깃 폴더 안에 깃폴더 클론받은게 들어가져있으면 생성되는거같은...?

일단 에러는 :

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 이전이라면를 입력하세요

3. ! [rejected] master -> master(fetch first) 오류

원인 :

깃이 원격 저장소와 현재 로컬 저장소가 동기화되어 있지 않은 경우

해결 :

git push origin +master

4. git push origin master 시 master -> master (non-fast-forward)에러 발생

또는

git pull 또는 git merge 명령이 정상적으로 동작하지 않을떄

원인 :

  1. 깃헙의 원격저장소와 로컬 저장소 간의 공통분모가 없는 상태에서 병합하려는 시도에 의해 할때 발생
  2. .gitignore 파일 또는 README.md파일로 인해 발생.

기본적으로 관련 없는 두 저장소를 병합하는 것은 안되도록 설정되어 있다.

그렇다면 그냥 커밋내용 삭제하고..? 파일을 삭제하면 되지않을까? 그것 외에도 쉬운 방법이있다.

해결방법:

  1. 일단 기존 작업한 내용이 있다면, 먼저 pull로 받은다음에 정돈하여

git pull origin (branchname) --allow-unrelated-histories

  1. push를 진행하되, 일반적인 push가 되지 않는다면,

git push origin +master

하면 푸쉬가 된다!!!

사실 기존작업이 아무 상관없다면 2번방식을 바로 진행해도 무관!

5. git pull을 했는데 fatal: Need to specify how to reconcile divergent branches.뜬다?

원인 :

깃에서 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)"는 로컬 브랜치에 추가적인 커밋이 없고 원격 브랜치에만 새로운 커밋이 추가된 상황에서 사용된다.. 아에 다른 내용이 로컬에 있다면 이것을 사용하면 안된다.

참조 : https://velog.io/@yunu/git-pull-%ED%95%A0-%EB%95%8C-fatal-Need-to-specify-how-to-reconcile-divergent-branches.-%EC%98%A4%EB%A5%98

profile
초보개발자

0개의 댓글