IT 기타

[Git] Git Merge에 대하여 알아보기

YaluStar 2023. 1. 29. 00:01

안녕하세요.

이번에는 Git Merge 기능을 케이스 별로 알아보겠습니다.

 

merge case 1 - 각 branch에서 서로 다른 파일을 수정하였을 때

merge case 2 - 각 branch에서 같은 파일이지만 다른 부분을 수정하였을 때

merge case 3 - 각 branch에서 같은 파일에서 같은 부분을 수정하였을 때

 

Merge

(main) git merge a

  • 기본적으로 사용하는 방법
  • main에 a branch 내용을 합침
git checkout main
git merge test

 

case 1번 하기전에 생성되어 있는 모든 branch 삭제 후 진행하시기 바랍니다.

 

merge case 1

  • branch에서 다른 파일을 수정하였을 때 test branch에서는 readme 파일 수정, admin branch에서는 admin.html 파일 수정

 

test, admin 브랜치 2개를 생성합니다.

git branch test
git branch admin

git checkout test

 

test 브랜치에서 readme 파일 수정 / 다른 파일도 상관 없습니다.

git add .
git commit -m "test branch"

 

브랜치 변경 후 진행할 것

git checkout admin

 

admin.html 파일 생성 후 내용 입력합니다.

 

git add .
git commit -m "admin branch"

 

test 브랜치를 admin 브랜치와 합친다.

git checkout test
git merge admin

 

  • merge 이후 창이 입력 창이 나오는데 commit -m "메시지" 입력하는 것처럼 i 눌러서 INSERT로 바꾸면 내용 입력할 수 있습니다.
  • 메시지 입력 창에서 ESC 누른 후 아래 내용 중에서 선택해서 입력해주면 됩니다.
  • :wq => 저장하고 종료
  • :q! => 저장하지 않고 종료

여기서는 :wq 로 입력하여 종료합니다.

 

창을 나오면 merge가 되었다고 나옵니다.

 

파일도 test 브랜치 1개에 합쳐진 것을 볼 수 있습니다.

 

마지막으로 git push origin test 까지 해주면 됩니다.

git push origin test

 

그리고 홈페이지에서 test branch 선택 후 admin branch에서 수정한 내용이 제대로 들어갔는지 체크하면 종료입니다

 

 

 

 

case 2번 하기전에 생성되어 있는 모든 branch 삭제 후 진행하시기 바랍니다.

 

merge case 2

  • branch에서 같은 파일이지만 다른 부분을 수정하였을 때

 

main에서 test.html 파일을 1개 생성 후 저장합니다.

test.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
</html>

 

test.html 파일 생성 후 push 까지 해줍니다.

git add .
git commit -m "test"
git push

 

main에서 one branch를 생성합니다.

git branch one
git checkout one

 

one branch에서 test.html 파일의 Title 수정 후 commit 까지 진행합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>one Branch</title>
</head>
<body>
    
</body>
</html>

 

git add .
git commit -m "feat: one branch Title"

 

main Branch로 복귀 후 two Branch 생성 및 이동

git checkout main
git branch two
git checkout two

 

two branch에서 test.html 파일의 h1 태그 내용 수정 후 commit 까지 진행

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Two Branch</h1>
</body>
</html>

 

git add .
git commit -m "Two Branch H1"

 

one branch로 이동 후 git merge two 실행

git checkout one
git merge two

 

창이 나오면 i 누르고 ESC 누르고 :wq 입력 후 엔터를 눌러줍니다.

 

merge가 완료되었습니다.

 

one branch에 one와 two 내용이 합쳐진 코드 확인합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>one Branch</title>
</head>
<body>
    <h1>Two Branch</h1>
</body>
</html>

 

 

case 3번 하기전에 생성되어 있는 모든 branch 삭제 후 진행하시기 바랍니다.

 

merge case 3

  • branch에서 같은 파일에서 같은 부분을 수정하였을 때

 

main에서 e 브랜치를 생성 후 checkout 으로 이동합니다.

git branch e
git checkout e

 

e branch에서 test.html의 title을 수정 후 commit 까지 진행합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>E Branch</title>
</head>
<body>
    
</body>
</html>
git add .
git commit -m "E Branch"

 

다시 main으로 이동 후 f branch 생성 후 이동합니다.

git checkout main
git branch f
git checkout f

 

test.html의 title 수정 후 commit 까지 진행합니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>F Branch</title>
</head>
<body>
    
</body>
</html>

 

git add .
git commit -m "F Branch"

 

e branch로 이동 후 git merge f  명령어를 입력합니다.

git checkout e
git merge f

 

merge 명령어 실행 시 코드가 바로 합쳐지지 않고 표시가 됩니다.

 

bash창에서는 (e)가 (e|MERGING)으로 표시 됩니다.

 

충돌이 생긴 상태이며, VS Code에 다음과 같이 선택할 수 있는 보기가 나옵니다.

 

해당 선택지를 선택해도 되고, 수동으로 수정해도 됩니다.

Accept Current Change => 현재 위치(E)가 최신이므로 E를 선택하겠다.

Accept Incoming Change => F가 최신이므로 F를 선택하겠다.

Accept Both Change => 둘다 반영하겠다 => 해당 Ex의 경우에는 title이 2개가 생성됩니다.

Compare Change => 비교를 정확하게 보고 싶은 경우 선택

 

 

여기서는 Accept Current Change 를 선택해줍니다.

선택하면 E Branch로 타이틀로 변경되는것을 볼 수 있습니다.

변경되었으면 파일을 저장합니다.

 

이제 다시 add 명령어와 commit 명령어를 입력합니다.

commit하면 (e|MERGING)에서 (e)로 다시 바뀌며 충돌이 해결되었습니다.

git add .
git commit -m "feat: test merge"

 

 

이상으로 Git Merge의 상황에 따른 처리 방법에 대하여 알아보았습니다.

감사합니다.

 

반응형