[git] conflict, 충돌 해결하기
conflict
서로 다른 2가지 이상의 브랜치에서 동일한 파일의 내용을 수정하고 merge를 하면 충동이 발생한다.
충돌 해결 방법
- 수동으로 해결
- vscode 활용
0. 충돌 상황
<<<<<<< HEAD
Oh.. Here!! From master branch!
=======
Oh.. Here!! From feature branch!
>>>>>>> another-branch
merge를 하고 출동이 발생하면 해당 파일에 이러한 표시가 보인다.
HEAD는 현재 브랜치의 내용을 표시하고 another-branch는 HEAD가 아닌 다른 브랜치를 말한다.
1. 수동으로 해결하기
직접 해당 파일로 들어가서 충돌 부분에서 둘중 1개를 선택하든지 둘다 선택하든 하여 수정해주고 저장한다.
이후에 git status를 확인하면 아래와 같은 순서대로 진행하게 되어있다.
git add 충돌파일
git merge --contine
이렇게 되면 no-fast-forward merge가 진행되면서 완료된다.
2. vscode로 해결하기
2-1. mergetool 설정하기
- git 환경설정 파일 열기
git config --global -e
- merge, mergetool 설정하기
[merge]
tool = vscode
[mergetool "vscode"]
cmd = code --wait $MERGED
2-2. merge하기
- merge하기
git merge 브랜치
- conflict 알림
Auto-merging main.txt
CONFLICT (content): Merge conflict in main.txt
Automatic merge failed; fix conflicts and then commit the result.
- mergetool(vscode) 실행하기
git mergetool
- vscode에서 conflict 해결하기
3가지 옵션중 한가지를 클릭하고 저장한다.
- Current Change : 현재 HEAD의 내용
- Incoming Change : merge되는 다른 브랜치의 내용
Compare Change는 2개의 파일을 각각 열어서 비교해준다.
- ❗️merge의 부산물
vscode로 merge를 하고 나면 파일명.확장자.orig
파일이 생긴것을 확인할 수 있다.
이 파일은 conflict가 발생했을 때의 내용을 그대로 담고 있는 파일이다.
하지만 이런 파일이 생기는것은 번거롭기 때문에 아래와 같은 명령어를 이용하여 설정을 끄도록 하자.
mergetool의 백업파일(
.orig
파일)을 유지하는 옵션을 끈다.
git config --global mergetool.keepBackup false
혹은 git config 파일을 열어서 아래와 같이 옵션을 추가한다.
[merge]
tool = vscode
[mergetool "vscode"]
cmd = code --wait $MERGED
trustExitCode = true
keepBackup = false # 백업파일 생성하지 않도록 옵션 추가.
부산물 (
.orig
파일) 삭제하기이미 생성되어있는 부산물 파일을
git clean
명령어를 이용하여 삭제할 수 있다.(물론 GUI에서 편하게 삭제할 수 도 있다.)
git clean
명령어는 추적이 되고 있는 않는 (untracked) 파일들을 삭제하는 명령어이다.간단하게
git clean -f
이용해서 삭제하자.옵션) -f : 강제 삭제 , -d : 디렉토리 삭제
- merge 완료하기
git merge --continue
위 명령어를 통해 merge를 마무리한다.
Author And Source
이 문제에 관하여([git] conflict, 충돌 해결하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@younoah/git-conflict-충돌-해결하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)