또 다시 간만에 작성하는 Git 이야기...^^
branch의 경우 설명하는 글들을 읽어도 알기 힘든 부분들이 많다.
오늘 살펴보고자 하는 것은 지난 번 포스팅한 내용 중,
merge를 하게 되면 마지막 commit을 한 내용을 그대로 가져온다고 했었다는 내용에 대해서다.
Git의 branch를 그냥 막 사용한다면 모르겠지만,
하나 하나 그 내용을 분석이 필요하다고 하면 아래 내용을 잘 따라와보면 도움이 될 것이다.
1. 준비
- 지금 branch를 활용한 작업을 하기 전에 준비를 하자.
$ git branch -a |
- [ git branch -a ] 명령을 통해 모든 branch 상태에 대해서 알아보자.
- [ * ] 표시가 되어있는 branch가 지금 현재 작업을 하고 있는 branch이다.
2. branch & commit
- branch를 하나 만들고, 'master branch'에서 commit을 하나 해보자.
$ git branch patch1 $ nano ./readme.txt $ git commit -a -m "nano readme.txt in master br" |
- "A" 시점에서 'patch1 branch'를 생성을 하고,
- 'master branch'에서 파일 수정 후 commit을 해서 "B" 시점으로 갔다.
- 그래서 'master branch'는 지금 현재 "B" 위치에 있는 것이다.
3. checkout & commit
- 작업하고 있는 branch를 바꿔보자.
$ git checkout patch1 |
- [ git checkout patch1 ]을 통해 작업하고 있는 branch를 변경했다.
$ nano ./readme1.txt $ git commit -a -m "nano readme1.txt in patch1 br" |
- 'readme1.txt' 파일을 수정 후 commit 하자.
- commit을 추가로 한 번 더 해보자.
$ nano ./readme1.txt $ git commit -a -m "1 more, nano readme1.txt in patch1 br" |
- 'patch1 branch'에서 commit 2건을 추가한 것이다.
4. checkout & merge
- 각 branch 別 상황을 좀 살펴보자.
$ git branch -a $ git log -2 $ git checkout master $ git log -2 |
- 'patch1 branch'의 log들과 'master branch'의 log들을 잘 살펴보기 바란다.
- 이제 merge를 실행해 보자.
$ git merge patch1 $ git log -4 |
- 위 그림과 스크린샷을 잘 봐야 한다!!! 많은 것들이 녹아 있다.
- "E" 지점(commit)은 별도로 만든 것이 아니라 'merge'로 만들어진 것이다.
- 그래서 log를 보면 "Merge branch 'patch1'"이 보일 것이다.
- 그런데, 또 하나 특이한 것은 'patch1'에서 이루어진 commit까지 모두 따라왔다.
- 그러면, 'patch1 branch'를 지워버리면 어떻게 될까?
$ git branch -d patch1 |
- 'patch1 branch'를 그냥 지워버리면 어떻게 될까?!
- 위에서 보는 바와 같이 그냥 'branch'만 지워지고 변화는 없다.
- branch를 지운다고 하여도 그 branch에서 작업을 했던 commit들은 지워지지 않는다는 말 같은데...
- merge가 되었다면 의미가 있지만, merge가 없는 상태에서 branch를 지웠다면...
- 의미 없는 commit들이 그냥 살아있다는 말이 되는데...
- 이 부분에 대해서는 꼭 한 번 깊이있게 살펴볼 예정이다. 개인적으로 관심있는 부분이라서....^^
여하튼, 이번 포스팅에서 확인을 한 것은,
branch에서 만든 commit들이 merge 후에도 계속 따라온다는 것이다.
commit 하나 하나에 더욱 더 신경을 써야 한다는 결론이 나온다.
반응형
'SCM > Git-GitHub' 카테고리의 다른 글
Git Branch (브랜치) - Local Ⅴ (ETC) (0) | 2012.04.24 |
---|---|
Git Branch (브랜치) - Local Ⅳ (Conflict) (0) | 2012.04.24 |
Git Branch (브랜치) - Local Ⅱ (Merge, Delete) (0) | 2012.04.15 |
Git Branch (브랜치) - Local Ⅰ (branch 생성, HEAD) (0) | 2012.04.12 |
Pro Git 번역본 (0) | 2012.03.22 |