728x90

# 출처 : [도서]Do it! 지옥에서 온 문서 관리자 깃&깃허브 입문(이고잉)


  • 서로 다른 파일 병합하기
  • 같은 문서의 다른 위치를 수정했을때 병합하기
  • 같은 문서의 같은 위치를 수정했을때 병합하기
  • 병합이 끝난 브랜치 삭제하기 : git branch -d

서로 다른 파일 병합하기
git init manual-2
cd manual-2
ls -al
vim work.txt							# '1' 작성 후, 저장 및 나가기
git add work.txt
git commit -m "work 1"

git branch o2
vim master.txt							# 'master 2' 작성 후, 저장 및 나가기
git add master.txt
git commit -m "master work 2"

git checkout o2
vim o2.txt								# 'o2 2' 작성 후, 저장 및 나가기
git add o2.txt
git commit -m "o2 work 2"
git log --oneline --branches --graph

git checkout master
git merge o2							# vim 창으로 진입된다. 나가기(:wq)
git log --oneline --branches --graph

git merge o2는 현재 브랜치가 master이므로 master 브랜치에 o2브랜치를 가져와 병합한다는 의미이다. 아래에 그래프를 보면, o2가 분기되었다가 병합된 것을 확인할 수 있다.
맨 처음 master 브랜치에서 work1 파일을 생성한 다음 커밋하고 난 뒤, 브랜치 o2를 생성한다. 생성만 하고 난 뒤, 여전히 master 브랜치에서 master work2 파일을 생성하여 커밋한다. 그 뒤에 o2 브랜치로 이동하여 o2 work2 파일을 생성하여 커밋한다. 그 뒤 master 브랜치로 이동하여 o2 브랜치를 merge한다. 그래서 다음과 같은 흐름이 된 것이다.

 빨리 감기 병합
master 브랜치에서 브랜치를 분기한 후, master 브랜치에 아무 변화가 없다면(새로운 커밋이 없다면)
분기한 브랜치를 병합하는 것은 간단!
이유 : 분기한 브랜치에서 만든 최신 커밋을 master 브랜치가 가리키게만 하면 되기 때문

이 경우, 화면에 커밋 해시가 업데이트되었다는 내용과 함께 fast-forwrd라는 메세지가 나타나는데,
이런 병합을 빨리 감기 병합(fast-forward merge)라고 부른다.

git merge의 결과가 단순히 포인터를 움직인 것이기 때문에 따로 커밋 메세지 창은 열리지 않는다.
git init fast-menual
cd fast-menual
vim work.txt	# 'work 1' 작성 후, 저장 및 나가기(:wq)
git add .
git commit -m "work 1"

git branch o2
git checkout o2
vim o2.txt		# 'o2 work 2' 작성 후, 저장 및 나가기
git add .
git commit -m "o2 work 2"
vim o2_2.txt	# 'o2_2 work 2' 작성 후, 저장 및 나가기
git commit -am "o2_2 work 2"

git checkout master
git log --oneline --branches --graph
git merge o2
git log --oneline --branches --graph​
master 브랜치에는 아무런 커밋도 하지 않았기 때문에 빠른 감기 병합이 일어날 수 있다.
내가 생각했을때, 다음과 같은 흐름이지 않을까 싶다.
브랜치를 병합할 때 편집기 창이 열리지 않게 하려면,
git merge 브랜치명 --no-edit


브랜치를 병합할 때 편집기 창이 나타나지 않도록 설정한 경우, 편집기 창이 열리도록 하려면,

git merge 브랜치명 --edit

 

같은 문서의 다른 위치를 수정했을때 병합하기
git init manual-3
cd manual-3
vim work.txt

work.txt를 다음 내용으로 넣는다. 참고로 나중에 문서를 병합할 예정이니 내용 사이에 두 줄의 공백(노란 박스)을 두었다.

git add work.txt
git commit -m "work 1"
git branch o2 		# master와 o2 브랜치 모두 work.txt를 가지고 있다.

vim work.txt		# 여전히 master 브랜치에서 work.txt를 수정한다.

master branch에서 work.txt를 수정한 모습이다. 공백에 "master content 2"를 작성하였다. 저장 후 나가기(:wq)

git commit -am "master work.txt"
git checkout o2
vim work.txt		# o2 브랜치에서 work.txt를 수정한다.

o2 branch에서 work.txt를 수정한 모습이다. 두번째 문단에 "o2 content 2"를 작성하였다. 저장 후 나가기(:wq)

git commit -am "o2 work 2"
git checkout master
git merge o2		# vim 창으로 들어갈텐데, 그냥 저장 및 나가기(:wq)
cat work.txt		# work.txt가 병합되었는지 확인

master 브랜치에서 병합 후, work.txt 파일을 확인해본 결과; 각각의 브랜치가 작성한 내용이 병합된 것을 확인할 수 있다.

 

같은 문서의 같은 위치를 수정했을때 병합하기
git init manual-4
cd manual-4
vim work.txt					# 내용은 사진 참고
git add work.txt
git commit -m "work 1"

git branch o2
vim work.txt					# 내용은 사진 참고
git commit -am "master work 2"
git checkout o2
vim work.txt					# 내용은 사진 참고
git commit -am "o2 work 2"
git checkout master
git merge o2

mater 브랜치와 o2 브랜지 모두 같은 파일, 같은 위치에 내용을 추가했다. 그래서 merge 도중 충돌이 발생했다는 문구와 함께, work.txt를 확인해보면 다음과같이 가로줄로 충돌이 난 부분을 알려주고 있다.

vim work.txt
git commit -am "merge o2 branch"
git log --oneline --branches --graph

다음과 같이 충돌난 곳을 수정한 후, 커밋하게 되면 merge가 된 것을 확인할 수 있다.

 

병합이 끝난 브랜치 삭제하기
git branch -d

브랜치를 병합한 후, 더 이상 사용하지 않는 브랜치는 삭제할 수 있다.

하지만, 삭제를 하더라도 브랜치가 완전히 지워지는 것은 아니므로 다시 같은 이름의 브랜치를 만들면 예전 내용을 다시 확인할 수 있다.

git branch -d o2
git branch -D o2 # 강제 삭제(master에 병합하지 않은 브랜치를 삭제할 경우, 오류가 나는데 이를 강제로 삭제하고 싶다면 -D 옵션 사용)

저장소의 기본 브랜치는 master이므로,

브랜치를 삭제하려면 master 브랜치에서 해야한다. (git checkout master 필수)

 

※ 브랜치를 삭제하는 것은 완전히 저장소에서 없애는 것이 아니라 깃의 흐름 속에서 감추는 것이라고 생각하면 된다.

728x90

'IT > Git' 카테고리의 다른 글

[Git] stash 일부만 하기  (0) 2022.12.16
[Git] 원격 브랜치 가져오기  (2) 2022.09.20
[Git] 브랜치 생성, 이동, 확인  (0) 2022.08.12
[Git] 작업 되돌리기  (0) 2022.08.12
[Git] 커밋 메세지 수정 및 상세보기  (0) 2022.08.11

+ Recent posts