-
git 병합(merge) 시 충돌(conflick)날 때 해결방법(TortoiseGit)개발/GIT 2018. 10. 18. 22:29
Pull을 시도 했을 때, 아래와 같은 충돌을 알리는 메시지가 나타났습니다.
이 게시글은 이를 병합처리하는 과정입니다.
git.exe pull --progress -v --no-rebase "origin"
POST git-upload-pack (287 bytes)
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
From https://github.com/devgaram/gitTest
3814fd7..8052ed6 master -> origin/master
Auto-merging index.txt
CONFLICT (content): Merge conflict in index.txt
Automatic merge failed; fix conflicts and then commit the result.
git did not exit cleanly (exit code 1) (1953 ms @ 2018-10-18 오후 10:06:14)
과정을 쉽게 이해할 수 있도록 예제를 들어 설명하겠습니다.
1. kim 디렉토리에 git init 후 index.txt 파일을 생성합니다.
이 파일을 git이 추적할 수 있게 add를 합니다.
2. ok를 누릅니다.
3. 커밋 메시지를 입력하고 커밋 버튼을 누릅니다.
4. 커밋이 완료되면 Push를 누릅니다.
5. push가 완료되었습니다.
*참고) tortoisegit에서 remote 설정하는 방법입니다.
6. 깃헙에 올라가있는 gitTest.git 소스를 lee 디렉토리에 clone 합니다.
7. 다시 kim 디렉토리로 돌아가서, 다음과 같이 index.txt를 수정합니다.
8. commit을 하고
9. push를 합니다.
10. push가 정상적으로 완료되었습니다.
11. lee 디렉토리로 가서 다음과 같이 이름을 kim에서 lee로 수정합니다.
12. 커밋메시지 입력 후 커밋합니다.
13. 커밋완료
14. push 전 pull을 합니다.
** 다음과 같은 알럿창이 뜹니다.
** 위와 같이 conflict 발생했다고 메시지가 보입니다.
15. diff로 들어가면 아래와 같이 index.txt에 conflict가 발생했음을 알 수 있습니다.
16. 해당 라인을 더블클릭하면 아래와 같은 화면이 나옵니다.
17. 빨간색 부분이 충돌난 부분으로 머지가 필요합니다.
* 실제 index.txt는 위와 같이 <<<<HEAD ====== >>>>> 표시가 됩니다.
<<< 이 부분이 충돌이 난 부분임을 의미합니다.>>>
=====를 기준으로 윗 부분은 자신의 소스고 아랫부분이 다른사람의 소스입니다.
- 2번 라인은 제 코드(lee)의 것으로 사용하겠습니다.
- 3번 코드는 다른사람(kim)의 코드를 사용하겠습니다.
- 병합을 완료하면 위에 Mark as resolved를 누르고 창을 닫습니다.
- 실제 코드(lee)도 수정되었음을 알 수 있습니다.
- 다시 diff를 통해 working tree를 확인해보면 conflict가 해결되었음을 알 수 있다.
- commit을 합니다.
- 정상적으로 커밋이 완료되었습니다.
- 그 후 pull, push를 시도하면 정상적으로 됨을 확인할 수 있습니다.
'개발 > GIT' 카테고리의 다른 글
GITHUB 시작하기1 (0) 2018.01.07