서론
우여곡절 git에 입문하고 사용하던 중
하나의 branch로 커밋을 여러 번 하다 보니 이래저래 꼬여버렸다.
branch는 한번 쓰고 없애고 다시 만드는 게 좋다더라..
branch 삭제
git branch -d <branch name>
하려하니
$ git branch -d ule
error: The branch 'ule' is not fully merged.
If you are sure you want to delete it, run 'git branch -D ule'.
에러가 뜨더라
밑에 친절하게 대안까지 알려주어서 해당 명령어면 삭제가 되겠지만
일단 원인을 알아보자
-d를 사용한 branch 삭제는 branch 가 "fully merge"되었는지 여부를 결정할 때 현재 HEAD만 고려합니다. branch 가 다른 branch와 merge 되더라도 불평합니다 . 이와 관련하여 오류 메시지는 확실히 더 명확할 수 있습니다... 삭제하기 전에 병합된 branch를 체크아웃하거나 git branch -D를 사용할 수 있습니다. 대문자 -D는 검사를 완전히 무시합니다.
즉 에러보다는 경고성 메시지이고 현재 HEAD기준으로 도달할 수 없는 commit이 있고, 해당 branch를 삭제했을 때 커밋을 잃을 가능성이 있을 수도 있다는.. 내용 같다.
git을 봤을 때는 다 제대로 올라간 것 같긴 한데..
그럼 사실 아래 명령어로 쓱-싹 삭제해 주면 노 프라블럼이다.
git branch -D <branch name>
본론
but..ㅠ
직업특성상(디비디딥) 데이터 유실을 두고 볼 수 없었기에 좀 더 확실하게 알아봤다.
의문: branch를 삭제 시 의사결정을 어떻게 내릴까?
1. merge 되지 않은 commit이 있는가?
git log <branch name> ^main --no-merges
- git log
git 버전 제어 시스템에서 repository에서 수행된 모든 commit 목록을 표시하는 데 사용- ^
git에서 통상적으로 commit의 부모의미
git log에서는 지정된 commit에서 도달할 수 있는 commit을 제외
→ git log ^main : main branch에서 도달할 수 없는 모든 commit을 보여줘 - no-merges 옵션
출력에서 merge commit을 제외
- ^
2. --no-merges에서 log가 안 나오면 되는 걸까?
아니요..
해당 merge commit이 변경사항이나 수정사항을 가지고 있음을 의미할 수도 있기에
변경사항 또는 수정사항이 있는 모든 merge commit을 제외하기
$ git log <branch name> ^main --no-merges --first-parent
- -first-parent
merge commit의 첫 번째 부모만 따르도록 Git에 지시
merge과 관련 없는 변경 사항이 포함된 merge commit을 표시하지 않음
결론
💡 branch에서 더 이상 commit 할 것이 없고 git log에서 모든 변경 사항이 main branch로 merge 되었다면 삭제해도 됨!
branch 삭제 전 merge 되지 않은 변경 사항 확인하자
merge 되지 않은 branch를 삭제하면 변경 사항도 삭제되기 때문에, 제대로 병합되었는지 확인 필요
정 불안하면 branch를 백업해 두자
삭제하려는 branch와 동일한 commit을 가리키는 새 branch를 생성하여 백업 생성
git 백업
git branch <new branch> <delete branch>
그러면 delete branch와 동일한 commit을 가리키는 new branch가 생성
내 경우엔 commit 은 되었는데 merge 가 덜 되어있었다.
merge 해주고 삭제하니 경고 없이 잘 진행되는 것을 볼 수 있었다.
$ git merge --no-ff ule
Merge made by the 'ort' strategy.
....
$ git branch --merged main
* main
ule
$ git branch -d ule
Deleted branch ule (was e013c92).
$ git branch
* main
++
뭐든 log 보는 게 중요한 것 같다.. git log 보는 법을 공부해야겠다..
'IT것이 알고싶다 > GitHub' 카테고리의 다른 글
[Github]왕초보 깃헙 시작하기 풀리퀘스트(pull request)-clone,add,commit,pr, erro:failed to push some refs to 까지 (1) | 2023.02.14 |
---|