출처:
생활코딩 git 강의: https://opentutorials.org/module/3762
sourcetree, git 설치 가이드: https://github.com/egoingsb/git-offline/wiki/Sourcetree
git doc: https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-%EB%B2%84%EC%A0%84-%EA%B4%80%EB%A6%AC%EB%9E%80%3F
버전 관리 도구란?: https://opentutorials.org/course/2482/13915
손깃: 개념 알려주기용. 실제로 저렇게 안됨
1. Branch 이해하기
ex) 현대는 현대대로, bmw는 bmw대로 원하는 것이 다르다면? 이를 해결해주는 기술이 branch
사용하는 경우:
: 실험적인 기능을 따로 빼놓기 위해. (100개 중 실험적인 커밋 20개를 나중에 도려내는 작업이 힘들 것임 -> 실험적인 기능을 아예 브랜치 해버리는 거임. 나중에 버리고 싶으면 그 브랜치만 버리게)
깨알 지식:
- default branch = head->master
- 항상 자신이 어느 브랜치에 있는지 알아야 함
branch가 그 전까지의 commit을 똑같이 copy를 뜬 다음 가지치기하는 게 아님. (이렇게 하면 심각하게 비효율적일 것. 실제로 branch를 이런 개념으로 생각하고 옛날에는 유행하지 않았다고 함)
branch 뜨고 싶은 것을 가리키면 됨. (아래 사진 참고)
사진으로 이해하자
- exp라는 브랜치를 만들고 커밋해보자:
=c2에서 브랜치. m3는 c3를 가리키면 되고, master는 m3를 가리키면 됨
exp로 체크아웃하고 커밋한 상태:
= exp로 체크아웃한 다음에 거기서 commit을 한 게 e3, 34
= head를 보면 exp에서 브랜치한 걸 알 수 있음. e4 working copy를 가지고 있다는 걸 바로 알 수 있어야 함
branch의 단점
병합이 힘들다. 근데 git에서는 자동으로 해줌 -> 해결책 auto margin
2. Branch를 만들어보자
3. 병합의 여러가지 경우를 살펴보자
주의해야 할 점: master에서 exp를 체크아웃하는지,
exp에서 master를 체크아웃하는지
차이점을 잘 알고 있어야 함
(1) 서로 '다른 브랜치'에서 '다른 파일'의 '다른 부분'을 각각 수정하고 이를 병합해보자 - 난이도 중
목적:
m4와 e4를 병합해서 me5를 만들고자 함
m4와 e4는 me5의 "공통의 부모"라는 것 알고 있기
사진처럼 1, 2, 3 과정 하면 됨 (아래 설명 있)
how to? -step by step
1. 먼저, master로 checkout하기
2. 병합하기
2-1. 자동으로 commit 해주는 신비한 과정
그때 commit 내용은 (지가 알아서 이렇게 commit 내용도 만들어줌)
3. master가 m4가 아닌 me5을 가리킴
- 병합 취소하기
- git reset --hard work m4 커밋 아이디 (=병합하기 전 master가 있던 곳).
master가 working m4로 가게 됨 => 병합이 취소된 것과 같은 효과를 냄
- 병합이 끝난 브랜치 exp는 지워도 됨
이유: me5는 e4도 부모로 두기 때문에 e3, e4가 유실되는 건 아님. 언제든지 다시 찾아낼 수 있음
지우는 방법: master로 체크아웃하고 exp를 삭제.
병합 안 하고 exp 지우려 하면 경고창 뜰 거임(안전장치 st)-무시해도 ㄱㅊ
(2) 서로 '다른 브랜치'에서 한쪽에서만 파일을 수정하고 이를 병합해보자 - 난이도 하
1. master를 체크아웃
2. exp로 merge
충돌 문제 될 게 전혀 없음.
(3) 서로 '다른 브랜치'에서 '같은 파일'의 '다른 부분'을 수정하고 이를 병합해보자 - 난이도 중상
= 서로 다른 브랜치에서 같은 이름의 파일의 다른 부분을 수정했다면, 이것을 병합하려 할 때 [m1과 e1을 병합]
->git은 똑똑해서 알아서 잘 병합해줌
(4) 서로 '다른 브랜치'에서 '같은 파일'의 '같은 부분'을 수정하고 이를 병합해보자 - 난이도 상
=서로 다른 브랜치에서 같은 이름의 파일의 같은 부분을 수정하고 [m2과 e2를 병합]하려 할 때 문제가 발생하는데, 이것을 conflict라고 함
이처럼 conflict가 발생했을 때 3 way merge 덕분에 git은 "주인님, m2와 e2 conflict 났는데 여기만 수정해주세요, 나머지는 제가 다 알아서 할게요"라고 해주며 기특한 리액션을 보임. (임의로 m2를 선택하거나 그러지 않음)
3 way merge
= base, 수정 1, 수정 2 이렇게 3가지를 비교하여 합병하는 것을 말한다.
base : 수정 1과 수정 2가 공통으로 가지고 있는 부분을 base라고 한다.
4. conflict 해결하기
결합하고 나서의 work.txt 파일
<<<<< head
: 내가 현재 체크아웃되어 있는 브랜치
>>>>> exp
: 내가 병합한 브랜치
사진 해석: 이 부분에서 conflict가 났는데 이 부분 처리해주세요. 나머지 e1, m1은 제가 자동으로 해놓았습니다.
여기서 compare changes 누르면 아래 화면 나옴
+sourcetree에서는 이렇게 해결도 가능
merge 할 때. orig 파일이 생길 수 있는데 이건 지워도 됨. 합병에 대한 도움말 같은 게 들어있는 것뿐임
위 사진에서 '내 것'을 이용하여 해결하면
이렇게 커밋 내용이 자동으로 생성되고, 이대로 커밋하면 됨!!
'GIT.GITHUB' 카테고리의 다른 글
[GIT/GITHUB] Sourcetree에서 탈출하기 (0) | 2019.08.15 |
---|---|
[GIT/GITHUB] 깃 '이해'하기 (Revert, Clone, ssh key, Fetch, Pull, Push, 원격 저장소) (0) | 2019.08.13 |
[GIT/GITHUB] 깃 '이해'하기 (repository, commit, checkout, reset 해보기) (0) | 2019.08.09 |
git 쉽게 설명 (0) | 2018.12.17 |
Comments