1. Merge(병합)
git merge는 두 개의 커밋 포인터(보통 브랜치 팁)를 사용하며 두 포인터 간에 일반적인 기준 커밋을 찾는다.
Git은 일반적인 기준 커밋을 찾으면 대기 중인 각 병합 커밋 시퀀스의 변경 사항을 결합하는 새 '병합 커밋'을 만든다.


2. Fast-Forward Merge / 3-Way Merge
- Fast Forwad Merge
현재 브랜치 팁에서 대상 브랜치까지의 선형 경로가 있는 경우 빨리 감기 병합을 할 수 있다. 브랜치를 "실제로" 병합하는 대신, Git은 현재 브랜치 팁을 대상 브랜치 팁까지 이동시키는 작업만으로 기록을 통합할 수 있다. 대상 브랜치에서 연결할 수 있는 모든 커밋을 이제 현재 커밋을 통해 사용할 수 있으므로 기록이 효과적으로 결합된다.


- 3-Way Merge
이 방식은 단순히 브랜치 포인터를 최신 커밋으로 옮기는 게 아니라 Merge의 결과를 별도의 커밋으로 만들고 나서 해당 브랜치가 그 커밋을 가리키도록 이동시킨다. 이 방법으로 Merge를 실행하려면 각 작업 브랜치에서 서로 다른 파일을 수정해야한다. 만일, 같은 파일을 수정했다면 충돌이 발생하게 되고, 변경 사항을 다시 수동으로 맞춰줘야 한다. (충돌이 일어난 파일은 unmerged 상태로 바뀌기 때문에, git status를 통해 충돌이 난 파일을 확인한다.)


3. Merge 취소
- git merge --abort
--abort 옵션은 Merge 하기 전으로 되돌린다. 완전히 뒤로 되돌리지 못하는 유일한 경우는 Merge 전에 워킹 디렉토리에서 Stash 하지 않았거나 커밋하지 않은 파일이 존재하고 있었을 때뿐이다. - git merge --quit
수정한 파일을 Commit 하지 않고 Merge 하는 등의 실수로 현재 바라보는 브랜치를 unmerged 상태로 되돌릴 경우 사용하는 간단한 명령어이다. quit을 실행할 경우, 다시 그 브랜치의 변경사항을 add, commit 해준 다음 merge를 실행하면 된다. - git branch -D [삭제할 브랜치명]
일반적으로 사용하는 -d (delete) 옵션은 머지 중인 브랜치를 삭제하지 못하지만, -D 옵션은 머지 중인 브랜치라도 강제적으로 실행된다. 머지 중 충돌이 발생해 해결이 안되는 상황이라면 사용할 수도 있겠지만 해당 브랜치가 필요없다는 확신이 들 때만 사용해야한다. - git reset --hard HEAD
어떤 이유로든 Merge를 처음부터 다시 하고 싶다면 해당 명령으로 되돌릴 수 있다. 이 명령은 워킹 디렉토리를 그 시점으로 완전히 되돌려서 저장하지 않은 것은 사라진다는 점을 주의해야한다.
[참조문서]
https://www.atlassian.com/ko/git/tutorials/using-branches/git-merge
https://git-scm.com/book/ko/v2
ProGit 2nd Edition (2014)
반응형
'GIT > COMMAND' 카테고리의 다른 글
| [Git] Rebase (0) | 2023.01.08 |
|---|---|
| [Git] Cherry-pick & Merge --Squash (0) | 2023.01.07 |
댓글