협업을 하게 되면서 그저 혼자 하면서 커밋만 하던 때와 달리 브랜치를 생성하게 되면서 PR을 알게 되었다.
코드를 병합하는 과정에서 어떤 부분이 변경됐는지 서로 확인이 가능하고 코드 리뷰도 할 수 있다.
그렇다면 브랜치는 어떻게 만들까?
git checkout -b {브랜치명}
git branch
git checkout 으로 브랜치 생성과 체크아웃을 동시에 한다.
그러고 git branch하면 새로 만들어진 브랜치가 생성되었다는 것을 확인할 수 있다.
코드를 작성하고 새로 만든 브랜치에 Push하는 방법은
git add .
git commit -m "{커밋메시지}"
git push origin {브랜치명}
를 한다.
PR을 생성하고 날려서 팀원들에게 코드 리뷰와 확인을 받고
문제가 없으면 main으로 merge하면 된다. (git merge {브랜치명})
그러고 이제 사용한 브랜치는 다시 삭제해준다
git branch -d {브랜치명}
코드 동기화는 git pull 해주면 된다
이렇게 순탄하게 브랜치를 만들었으나..

PR은 또 유저가 삭제할 수 없어서 깃허브에 요청해서 삭제했다(포스팅해서 올려놨다. 또 나중에 쓸 거 같아서..ㅎ)
팀원분이 main을 최신으로 업데이트하고 그 시점에서 브랜치를 새로 따서 그 브랜치에서 cherry-pick해서 push하면 새 브랜치에 작업내용 그대로 올라갈 거라고 이야기해주셨다.
깃을 그저..새로운 레파지토리 생성...커밋...커밋 되돌리기..밖에 모르던 나는 일단 알겠다고 하며 무슨 용어인지 몰라서 이것저것 찾아보면서 시도를 해보았다.
하지만 계속 꼬였고 결국 다시 팀원분께 도와달라고 헬프요청을 했다.
git stash 작업 저장
git checkout main 메인으로 돌아오기
git fetch upstream main
git rebase upstream/main
git log로 확인해서 main이 맨위에 왔는지 확인 후
git checkout -b {새로운 브랜치}
git cherry-pick {커밋아이디}
git push origin {브랜치명}
으로 하면 된다고 알려주셨다.
그러나

uncommitted changes로 인해 git rebase upstream/main을 하면 이미 진행 중인 rebase 작업이 있다고 나오면서 오류가 뜬다.
그래서 위에 문제되는 파일로 가서 충돌(coflict)을 해결해주어야한다.
근데... 깃을 잘 몰라서 그런지ㅠㅠ 계속 uncommitted changes문제가 해결되지 않아서 머리를 쥐어짜던중에
아 그냥 원하는 커밋으로 돌아가서 거기서 main 최신 업뎃하고 브랜치를 새로 만들어야겠다.
라는 생각이 들어서
git checkout main
git reset --hard {commit_id}
원하는 커밋으로 돌아간다.
하지만 이렇게 하면 이전 커밋내용이 남아있기 때문에
git reflog expire --expire=now --all
git gc --prune=now
으로 과거 커밋을 만료시키고 도달할 수 없는 과거는 즉시 제거하도록 해준다.
(위 작업은 복구가 불가능하므로 신중하게 할 것)
git push origin main --force
으로 원격 저장소 main에 내용을 강제로 덮어쓰이게 해줬다.
그리고 여기서 새브랜치를 만들어줬다.
그랬더니!

드디어 브랜치에 해당되는 커밋내용만 PR에 보이는 것을 확인할 수 있다T.T!!
저렇게 해결하고 새로운 PR을 만드니 똑같이 다른 브랜치의 커밋 로그까지 딸려오는 경우가 생겼다 ^^

문제 원인은 브랜치 생성이었다. 내 로컬에 있는 main이 아니라 upstream에 있는 main에서 새로 브랜치를 따서 작업해야했었다.
git checkout upstream/main
git checkout -b {브랜치명}
git add .
git commit
git push origin {브랜치명}
<merge된 후 >
git checkout main
git branch -D {브랜치명}
git push origin :{브랜치명}
git pull origin main
git push origin main
이렇게 하면 해결 완료
브랜치 합치고 메인 업데이트 하기
git checkout main
git pull origin main
git merge {브랜치명}
git push origin main
마지막 커밋 취소
git reset --hard HEAD~1
'Programming > Git' 카테고리의 다른 글
[Git] 특정 commit 삭제하기 (0) | 2023.09.19 |
---|---|
[Git] 다른 브랜치로 commit 옮기기 (0) | 2023.09.19 |
[Git] 깃허브 PR 삭제하기 (0) | 2023.09.10 |
[Git] commit & push 기록 삭제 (0) | 2023.07.09 |