[git] git push 에러 발생에서 벗어나기

여리·2023년 6월 19일
0

개발공부하는 과정에서 나는 늘 git과 github를 기본 베이스로 작업을 수행한다.
이유는 원격으로 소스코드를 두어서 어느 로컬 컴퓨터에서도 작업이 가능하다는 장점 이 가장 크다. 물론, 기본적으로 협업에 있어서 사용하는 습관은 계속 가져야하는 마음가짐도 !

1. 상황

a. 기존에 다른 브랜치에서 작업을 하고있었고 작업하던 브랜치를 commit한 상태에서 다른 작업을 하기위한 새로운 브랜치로 작업 시작.
b. 작업 완료 후 push를 하려는데 아래 이미지 내용으로 에러가 발생.

🚨⚠️ 에러메시지

! [remote rejected]   class/paymentAPI -> class/paymentAPI (cannot lock ref 'refs/heads/class/paymentAPI': 'refs/heads/class' exists; cannot create 'refs/heads/class/paymentAPI')
error: 레퍼런스를 'https://github.com/hongyeollee/inflearn-codecamp.git'에 푸시하는데 실패했습니다

에러내용을 풀어서보면 '에러 메시지를 자세히 살펴보면 다음과 같은 정보를 알 수 있었다:
'refs/heads/class/paymentAPI'라는 참조(ref)를 잠글 수 없다고 나와있습니다. 이미 'refs/heads/class'라는 브랜치가 존재하여 'refs/heads/class/paymentAPI'라는 브랜치를 생성할 수 없다는 내용입니다.
이었다.

하지만 원격저장소에는 내가 사용하려는 브랜치는 존재하지 않았다.

c. 여기서 내가 생각했던 선택권은 2가지 방법

'내가 갖고있던 해결할 수 있다고 생각한 기본적인 방법들'
1. 내용을 파고들어 해당 브랜치를 push해서 merge시킨다.
2. 브랜치를 삭제하고 새로 작업해서 다시 Push한다.

d. git push origin ${branch name} (--force 또는 -f)를 사용해도 push는 되지 않았다. 생각해보면 아무리 강제로 push를 한다고 한들 기존 브랜치가 존재하는데 push를 덮어쓰기 하는게 아니라면 github에서는 이는 받아들이지 않을거라는 것이다.

git rebase, 원격저장소의 브랜치를 삭제하는 방법등을 사용해보아도 결론적으로는 Push를 거쳐가야 하기 때문에 해결할 수는 없었다.

🔺 많은 삽질의 흔적들...

2. 위의 상황에서 내가 생각한 방향

내가 지켜내야 하는 건 매우 명확했다.

브랜치 안에 작업했었던 소스코드들이 보존된 상태에서 push가 되고,
remote repo에 merge가 될 수 있도록 하는것.

3. 문제의 해결 방법과 해결 결과

이때의 방법에서는 해결방법을 생각했을때는
1. 근본적으로 작업하던 브랜치의 동일한 이름이 remote repo에 있기 때문에 '새로운 브랜치의 이름으로 작업한 소스코드를 옮겨 놓는다.' 였다.
2. 그렇다면 작업하던 브랜치를 복사(백업) 하고 복사(백업)한 브랜치의 이름을 Push하면 push가 가능하지 않을까?의 생각으로 접근했다.
3. 그렇게 작업시작.

git checkout backup/${branch name}

push가 되지 않는 브랜치에서 위의 명령을 사용하면 작업하던 브랜치의 기준으로 새로운 브랜치가 만들어진다. 그럼 브랜치 이름이 다르기 때문에 push가 가능 !

이렇게 local 과 remote의 충돌로 인한 해결방법을 해결할 수 있었다.

profile
beckend developer

0개의 댓글