Git 분기 병합
분기 병합
비상 수정 사항이 준비되었으므로 마스터 및 비상 수정 분기를 병합해 보겠습니다.
먼저 마스터 브랜치로 변경해야 합니다.
예시
git checkout master
Switched to branch 'master'
이제 현재 분기(마스터)를 긴급 수정과 병합합니다.
예시
git merge emergency-fix
Updating 09f4acd..dfa79db
Fast-forward
index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Emergency-fix 브랜치는 master에서 직접 나왔고 우리가 작업하는 동안 master에 다른 변경 사항이 없었기 때문에 Git은 이것을 master의 연속으로 봅니다. 따라서 마스터와 긴급 수정을 모두 동일한 커밋으로 가리키면 "빨리 감기"가 가능합니다.
master와 Emergency-fix는 기본적으로 동일하므로 더 이상 필요하지 않으므로 Emergency-fix를 삭제할 수 있습니다.
예시
git branch -d emergency-fix
Deleted branch emergency-fix (was dfa79db).
충돌 병합
이제 hello-world-images로 이동하여 계속 작업할 수 있습니다. 다른 이미지 파일(img_hello_git.jpg)을 추가하고 index.html을 변경하여 다음과 같이 표시합니다.
예시
git checkout hello-world-images
Switched to branch 'hello-world-images'
예시
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World
from Space" style="width:100%;max-width:960px"></div>
<p>This is the first
file in my new Git Repo.</p>
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
이제 여기에서 작업을 완료하고 이 분기를 준비하고 커밋할 수 있습니다.
예시
git add --all
git commit -m "added new image"
[hello-world-images 1f1584e] added new image
2 files changed, 1 insertion(+)
create mode 100644 img_hello_git.jpg
두 분기에서 index.html이 변경된 것을 볼 수 있습니다. 이제 hello-world-images를 master에 병합할 준비가 되었습니다. 그러나 최근에 master에서 변경한 사항은 어떻게 됩니까?
예시
git checkout master
git merge hello-world-images
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
index.html 버전 간에 충돌이 있어 병합에 실패했습니다. 상태를 확인해보자:
예시
git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Changes to be committed:
new file: img_hello_git.jpg
new file: img_hello_world.jpg
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
이것은 index.html에 충돌이 있음을 확인하지만 이미지 파일은 커밋할 준비가 되었고 준비되었습니다.
그래서 우리는 그 갈등을 고쳐야 합니다. 편집기에서 파일을 엽니다.
예시
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<<<<<<< HEAD
<p>This line is here to show how
merging works.</p>
=======
<p>A new line in our file!</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
>>>>>>> hello-world-images
</body>
</html>
버전 간의 차이점을 확인하고 원하는 대로 편집할 수 있습니다.
예시
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<link
rel="stylesheet" href="bluestyle.css">
</head>
<body>
<h1>Hello
world!</h1>
<div><img src="img_hello_world.jpg" alt="Hello World from
Space" style="width:100%;max-width:960px"></div>
<p>This is the first file
in my new Git Repo.</p>
<p>This line is here to show how
merging works.</p>
<div><img
src="img_hello_git.jpg" alt="Hello Git"
style="width:100%;max-width:640px"></div>
</body>
</html>
이제 index.html을 준비하고 상태를 확인할 수 있습니다.
예시
git add index.html
git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
new file: img_hello_git.jpg
new file: img_hello_world.jpg
modified: index.html
충돌이 수정되었으며 커밋을 사용하여 병합을 완료할 수 있습니다.
예시
git commit -m "merged with hello-world-images after fixing conflicts"
[master e0b6038] merged with hello-world-images after fixing conflicts
그리고 hello-world-images 브랜치를 삭제합니다.
예시
git branch -d hello-world-images
Deleted branch hello-world-images (was 1f1584e).
이제 분기 및 병합이 작동하는 방식을 더 잘 이해했습니다. 원격 저장소 작업을 시작할 시간입니다!