[Git] 내 로컬에 있는 브랜치를 지우고, Github에 있는 브랜치를 clone하는 방법

dev_swanim·2023년 5월 9일
0

Git / Github

목록 보기
1/4
post-thumbnail

문제 상황

커밋 메시지 컨벤션이 잘못돼서 그걸 해결하고자 git commit —amend 를 했다. push해서 원격 저장소에 올리기 전 상황이었다면, 문제 없이 잘 동작했을 것이다. 그런데 이미 원격 저장소에 push한 상황이었고…나는 그 상황에서 로컬에서 커밋 메시지를 변경했다.

그나마 다행인 건, 변경된 메시지를 다시 푸시하지 않았다는 것이다… 푸시를 하게 되면 force를 사용해야 돼서 팀원의 커밋 상황이 꼬일수도 있기 때문이다. 나 혼자 작업하는 것이라면 그냥 force를 통해 올려버릴텐데 그게 아니라서 조심스러웠다.

그냥 커밋 메시지만 바꾼 것 아니냐! 할 수도 있는데 amend 명령어는 기존의 커밋을 수정하는 것이므로, 커밋 메시지뿐만 아니라 커밋 자체를 변경한다.

과거의 커밋을 변경할 때 주의해야 한다. Rebase와 같이 이미 Push 한 커밋은 수정하면 안 된다.

https://git-scm.com/book/ko/v2/Git-도구-히스토리-단장하기


이 문제를 해결하려면 두 가지 방법이 있다.

  1. 로컬의 변경 내용을 원격 저장소의 브랜치에 강제로 덮어쓰기 → 협업 상황에서는 비추천

    $git push -f origin [브랜치명]

  2. 로컬에서만 생긴 문제니 내 브랜치를 삭제하고 원격 저장소의 브랜치를 받아오기

어떻게 해결할까...생각하다 두번째 아이디어가 떠올라서 시도했고…다행히 성공했다😭

아래는 해결 방법이다


깃 브랜치 변경 및 삭제

$git branch
# 현 브랜치 위치가 삭제할 브랜치 위치에 있으면 브랜치 옮기기
$git checkout main
git branch -D <내 브랜치> # 로컬 브랜치 삭제

-D를 쓴 이유는 해당 브랜치에서 커밋한 내용이 merge 되지 않았기 때문이다. 그래서 강제 삭제를 했다.

원격 브랜치 업데이트

$git remote update
  • 원격 브랜치 확인 : git branch -r
  • 로컬 브랜치 확인 : git branch -a

커밋 로그 상황 보는법

$git checkout [확인하고 싶은 브랜치] 
$git log

(원격 저장소에 커밋한 게 로컬에도 반영 됐는지 확인하기 위해 로그를 봤다)



새로 배우게 된 것

  1. git commit —amend를 통해 이전 커밋의 내용을 덮어쓰기 할 수 있다(덮어쓰기 할일이 있다면 푸시 전에 해야한다)
  2. 로컬과 원격 저장소 내용이 일치하도록 신경써줘야한다
  3. 깃 명령어 하나를 치더라도 신중하게 고민하고 작성하자!!! (정말 중요)
profile
데이터와 백엔드를 공부하고 있습니다😌

0개의 댓글