-
Git commit 취소? 브랜치를 새로 따자카테고리 없음 2023. 9. 7. 11:02반응형
GitLab에서 다른 브랜치와 충돌이 나서 머지할 수 없었다. 이때 GitLab에서 제공하는 수정을 이용해 commit을 했는데, 머지는 가능했지만 내 브랜치로 개발기 소스가 몽땅 딸려 들어오는 문제가 발생했다. 이 당혹스러운 commit을 되돌리고 싶을 때 사용한 방법을 소개한다.
Git Conflicts 상황 설명
먼저, GitLab에서 머지 요청할 때 충돌이 난 상황부터 시작한다. conflict 나면 Git이 자동으로 머지하지 못한다.
충돌을 해결하는 방법 2가지가 있다.
1. 내가 직접 파일을 수정하기
2. GitLab이 제공하는 수정(commit)을 이용하기
이때 나는 2번의 문제점을 이야기하고 싶다. 2번은 하면 안 된다. 2번은 이렇게 진행된다. GitLab에서 conflicts 난 파일을 보여준다. ‘use yours’ 혹은 ‘use theirs’를 선택한 후 충돌 해결용 commit을 진행할 수 있다.
이 commit을 하고 머지 요청을 하면 자동으로 머지할 수 있도록 ’Merge’버튼이 활성화된다. 오 예스 충돌 해결!? 아니다. Merge 하면 안 된다.
그렇다면 GitLab에서 제공하는 이 commit, 무슨 일이 벌어진걸까?
우리가 머지하길 원하는 브랜치가 develop이라고 하자.- 내 작업 브랜치 -> develop : 우리가 원하는 머지
(위 사진) GitLab에서 commit: Merge branch ‘develop’ into ‘내 작업 브랜치‘
이걸 하면 develop의 모든 소스들이 내 브랜치 소스와 합쳐져서 commit 된다.- develop sources -> 내 브랜치 : Oh no..
develop에는 다른 사람들이 작업한 개발 수정건이 반영되어 있다. 이 commit을 머지하면, 남의 수정건들이 몽땅 내 작업 브랜치로 들어온다는 것! (무시무시하다..)
만약 저 commit을 merge하면 내 브랜치를 stage나 운영에 반영할 때 develop branch의 개발단계 소스들이 모두 함께 딸려 올라간다. 대형사고겠지, 그러니 하면 안 된다는 말이다.
상황은 이정도 설명으로 됐다.
이제 develop소스가 들어온 채로 commit해버린 저 브랜치.. 어떻게 되살릴지 적어보겠다. (저 commit을 이미 merge했다면 이 솔루션은 도움이 안 될 것이다. 부디 merge하지 않길..)
Spring Tool Suite 4를 사용하는데, 다른 IDE도 비슷하지 않을까 싶다. 브랜치 새로 따는 내용이니까 맥락만 읽어주면 되겠다.
일단 commit을 취소하거나 되돌리는 방법은 구글링하면 많이 나온다. 그런데 나는 회사에서 그런 방법을 좀 피하고 있기 때문에..Git commit 취소? 브랜치를 새로 따자
스크린샷 첨부하겠다. Git commit을 제외한 브랜치를 새로 만드는 방법을 알려준다.
1. IDE에서 충돌난 파일의 history 확인
Team > Show in History 를 보면 된다.
2.되돌리고 싶은 지점으로 Check out
commit 마우스 오른쪽 클릭하면 메뉴가 나온다. Check Out하면 그 시점의 소스로 브랜치가 전환된다.
3. 되돌리고 싶은 지점에서 New Branch 따기
Package Explorer에서 프로젝트를 오른쪽 클릭 > Team > Switch To > New Branch…
그럼 새로운 브랜치가 따졌다. 기존 브랜치(GitLab에서 개발기 소스 부어버린 브랜치)는 버리고, 새 브랜치를 사용하면 된다.
생각보다 so easy..? 머지를 안했기에 가능한 일..
자 그런데 아직 문제가 남아있다.
새 브랜치는 이 사건의 시작이었던 그 ’충돌‘이 해결 안 된 그때의 그 상태다. (GitLab의 Commit 이전으로 돌아간 것뿐이니까)
이건 위에서 얘기한 1번. 내가 직접 소스 수정하기의 방법으로 진행해야 한다.
충돌은 혼자 나는 게 아니다. 누군가의 소스랑 충돌이 났으니.. 이제 그 누군가에게 말해야 한다.
나: “대리님 땡땡파일에서 충돌났는데 혹시 원복해주실 수 있나요? 아니면 제가 개발기 소스 엎어도 될까요?”
대리: “네 제꺼 무시하시고 덮어쓰세요~”
여기서 소스 엎는다는 말은..
개발기 소스파일을 복사, 내 작업브랜치에 붙여넣기, 그리고 커밋 앤 푸시를 하는 것이다. 그럼 내가 주도권을 가져오게 된다. you know what i mean
여기서 다시 내가 수정 완료한 소스로 갈아치우면 이제 개발기에 잘 머지되는 것을 확인할 수 있다. 진작에 이렇게 하면 될 것을 너무 돌아 왔다.. 화이팅!
끝.반응형