초보 개발자

3 - 3 브랜치 기능 및 사용 병합 2 본문

깃 & 깃허브

3 - 3 브랜치 기능 및 사용 병합 2

taehyeki 2021. 9. 14. 18:11

같은 문서의 다른 위치를 수정했을 때 병합하기

git init manual-3
cd manual-3
vim work.txt

이렇게 작성하고 저장하였다.

git add . 
git commit -m 'work 1'
git branch o2

work 1이라는 커밋을 만들었으므로 o2라는 새로운 브랜치를 만들었다. 이제 master브랜치와 o2브랜치에는 모두 work 1커밋이 있게 된다.

 

양쪽 브랜치에 있는 work.txt를 먼저 master브랜치에서 수정하겠다.

이렇게 수정 하고 master content 2 메시지로 커밋을 하겠다.

브랜치 이동 후 아래와 같이 수정을 해줄 것이다.

git checkout o2
vim work.txt

이렇게 수정 하고 o2 content 2 메시지로 커밋을 하겠다.

 

master브랜치와 o2브랜치 양쪽에서 work.txt파일을 수정했지만 문서 안의 수정위치는 다르다.

이럴 경우 어떻게 할까??

o2브랜치를 master브랜치와 합기치 위해 master브랜치로 체크아웃한 뒤 merge o2를 해준다.

git checkout master
git merge o2

자동으로 vim이 실행되고 커밋 메시지가 나온다 :wq로 저장하고 나오자

cat work.txt

이렇게 잘 하나의 파일이 합쳐진 것을 확인할 수 있다.

 

같은 문서의 같은 위치를 수정했을 때 병합하기

깃에서는 줄 단위로 변경 여부를 확인한다. 그래서 각 브랜치에 같은 파일 이름을 가지고 있으면서 같은 줄을 수정했을 때 브랜치를 병합하면 브랜치 충돌이 발생한다.

 

다시 새로운 폴더를 만들어 위와 같은 경우의 실습을 해보자.

git init manual-4
cd manual-4
vim work.txt

git add .
git commit -m 'work 1'

새로운 브랜치 o2를 만들어 보자.

git branch o2

아직 체크아웃 하지 않았으므로 현재 브랜치는 master이다

master브랜치의 work.txt를 수정하고 커밋하겠다.

git commit -am 'master work 2'
git checkout o2
vim work.txt

o2브랜치의 work.txt는 같은 줄에 이와 같이 작성을 해주었다.

자 여기서 master브랜치로 이동해 합병해주겠다.

 

이 전의 실습에서는 같은 파일의 다른 위치를 수정했을 때 오류가 나지 않았다.

이번엔 다르다 같은 파일의 같은 위치를 두 파일이 동시에 수정을 했다.

이럴 경우 어떻게 될까?

git checkout master
git merge o2

충돌이 일어난 것을 알 수 있다. 충돌이 생긴 문서는 자동으로 병합될 수 없으므로 사용자가 직접 충돌 부분을 해결한 후 커밋해야 한다.

vim work.txt

<<<<<<<HEAD와 가운데 가로줄====== 사이의 내용은 현재 브랜치 master에서 수정한 내용

가로줄 ======과 >>>>>>>o2 사이의 내용은 o2브랜치에서 수정한 내용이다. 양쪽 브랜치의 내용을 참고하면서 직접 내용을 수정해야 한다.

 

원하는 대로 수정이 되었으면 <<<<<HEAD >>>>>o2 ======은 지우고 저장하자

 

이제 다시 work.txt를 커밋하면 된다. ( merge아님에 주의 )

이렇게 해서 o2브랜치에서 병합한 work.txt의 충돌을 해결하고 커밋하였다. 

 

병합이 끝난 브랜치 삭제하기

병합 후 더이상 사용하지 않는 브랜치는 깃에서 삭제할 수 있다.

브랜치를 삭제하려면 master브랜치에서 해야한다.

 

git checkout master
git branch -d o2 // master브랜치에 병합하지 않은 브랜치를 삭제하려면 -D옵션

Deleted branch o2메시지가 나타나면 성공적으로 삭제 된 것이다.

하지만 삭제한 브랜치를 같은 이름으로 다시 만들면 예전 작업내용이 그대로 나타난다.

깃의 흐름속에 감추는 것이라고 생각하자

'깃 & 깃허브' 카테고리의 다른 글

4 - 1 원격 저장소와 깃 허브 만들기  (0) 2021.09.15
3 - 4 브랜치 관리  (0) 2021.09.14
3 - 2 브랜치 기능 및 사용 병합 1  (0) 2021.09.14
3 - 1 깃과 브랜치  (0) 2021.09.14
2 - 4 특정 커밋으로 되돌리기  (0) 2021.09.13