조금은 잡스러울 수 있는 부분들에 대해서 알아보자.
1. uncommit
$ git branch patch
$ nano ./readme.txt
$ git checkout patch
$ nano ./readme.txt
$ nano ./readme.txt
$ git checkout patch
$ nano ./readme.txt
- 'patch branch'를 생성하고, 그냥 'master branch'에서 파일을 수정한 다음에,
- commit 하지 않고 'patch branch'로 checkout을 하면...
- 좀 전에 'master branch'에서 수정한 파일의 내용이 어떻게 될까!?
- 결론은 변경된 내용이 그대로 'patch branch'에서도 유지가 되어 있다.
- 위 스크린샷에서 보면, checkout을 한 뒤 나오는 메시지를 보면 [ M readme.txt ]라는 내용이 보일 것이다.
- 이는 변경된 파일 내용을 유지하지 않을 경우 그 변경된 내역을 저장할 방법이 없기 때문으로 보인다.
- 파일의 변경된 사항은 commit 단위로만 기억하는 Git이라는 것을 잘 알고 있어야겠다.
2. conflict
- branch를 만들어서 각각 다른 부분들을 수정을 했다면, merge에 문제가 없으나,
- 같은 부분을 서로 수정을 했다면 merge에 문제가 발생을 한다.
$ git branch patch $ nano ./merge.txt $ git commit -a -m "modify 1st line in master br" |
- 'patch branch'를 만들어 놓고,
- 'master branch'에서 'merge.txt'라는 파일의 1번째 줄을 수정하고 commit 한다.
$ git checkout patch $ nano ./merge.txt $ git commit -a -m "modify 1st line in patch br" |
- 'patch branch'로 checkout을 한 후 'merge.txt' 파일을 수정 후 commit 한다.
- 'master branch' 때와 마찬가지로 1번째 줄을 수정한 것이다.
$ git checkout master $ git merge patch $ git status |
- 'master branch'로 다시 checkout을 한 뒤에 [ git merge patch ]를 해보자.
- 충돌이 난 것을 볼 수 있을 것이다 (같은 줄을 각자 수정을 했으니...)
- 충돌이 난 것을 다시 한 번 보기 위해서는 [ git status ]를 해보면 된다.
$ git mergetool |
- 머지 도구를 활용하기 위해서는 [ git mergetool ]이라고 실행하면 된다.
- 나의 경우에는 'meld'를 사용한다고 설정을 해놓아서 기본 도구로 (meld)가 보인다.
- 'meld'의 실행화면이다.
- 왼쪽이 'master branch'의 파일 내용이고, 오른쪽이 'patch branch' 파일의 내용이다.
- 수정한 내역이 있으면 위와 같은 화면이 나온다.
- 저장하고 빠져나오자.
- 'meld'를 빠져나오면 위 스크린샷과 같이 이상한 파일이 하나 생긴다. "merge.txt.orig"
- 그 내용을 살펴보면 위와 같이 뭐가 어떻게 충돌이 나는지를 보여준다.
- 뭐 별 문제가 없다면 그냥 삭제하면 된다.
- 이제는 merge를 할 때에 충돌이 난 부분을 해결을 했으니, commit을 하면 된다.
- 그런데, 위 스크린샷을 보면 상당히 특이한 것을 확인할 수 있다.
- commit 하나만 했을 뿐인데, log를 보면 1개가 아닌 2개의 log가 추가된 것을 볼 수 있다.
- 즉, patch branch에서 작성한 commit이 자동으로 따라 붙어버린 것이다.
여기까지 해서 conflict 해결하는 것까지 살펴보았다.
이제 자야겠다. 일자가 바뀌었다.
눈알이 빡~빡~
반응형
'SCM > Git-GitHub' 카테고리의 다른 글
Git Branch (브랜치) - Remote Ⅰ (Fetch) (0) | 2012.04.30 |
---|---|
Git Branch (브랜치) - Local Ⅴ (ETC) (0) | 2012.04.24 |
Git Branch (브랜치) - Local Ⅲ (Merge Log) (0) | 2012.04.23 |
Git Branch (브랜치) - Local Ⅱ (Merge, Delete) (0) | 2012.04.15 |
Git Branch (브랜치) - Local Ⅰ (branch 생성, HEAD) (0) | 2012.04.12 |