명령어 창에서도 확인하면, HEAD 가 main 브랜치를 바라보고 있다.
commit을 하면 같이 branch와 HEAD가 같이 움직임.
branch HEAD 처럼 단순히 커밋을 가리키는 포인터 역할
브랜치를 변경하면 HEAD도 같이 이동됨.
$git checkout dev
브랜치 변경 후 커밋을 하면, HEAD랑 같이 이동됨.
main 브랜치로 이동
$git checkout main
main 브랜치를 dev와 merge
$git merge dev --ff
merge : 두 브랜치가 가리키고 있는 커밋을 합치는 것
fast-forward : 전진의 의미이며 위 그림을 보면 bbb.txt 커밋에서 전진해서 HEAD가 ccc.txt 로 이동하는 것이 '전진'의 의미를 가진다. 그리고 새로운 커밋 생성하지는 않음.
fast-forwrad는 새로운 커밋을 생성하지 않는다고 했는데,
no fast-forward merge는 무조건 새로운 커밋을 생성한다.
$git merge dev --no-ff
main 과 dev 각각 ccc.txt 는 같은 파일인데도 --no-ff 에 의해서 새로운 커밋 생성
main 와 dev 내용이 달랐을 때, 충돌 발생
1.main branch 에서 aaa.txt add 후 commit
$git add aaa.txt
$git commit -m "add aaa.txt"
$git branach dev
$git checkout dev
$git add aaa.txt
$git commit -m "modified aaa.txt"
6. main 으로 브랜치 변경 후 aaa.txt 내용을 111-> 111222 으로 변경 그리고 add 와 commit
$git checkout main
aaa.txt 내용 변경(111 -> 111222)
$git add aaa.txt
$git commit -m "modified aaa.txt"
$git merge dev
충돌이 발생하고, HEAD(main)과 dev 충돌 위치를 알려주고 사용자가 원하는 코드는 남기고 나머지는 삭제해주면 된다.
예시로 충돌을 수정하면 아래와 같이 한다.
8. 다시 변경된 파일을 add 하고 git status로 확인하면 console에서 문구로 "All conflicts fixed but you are still merging" 즉 충돌은 해결했으나 여전히 merging 중이다라는 의미
9. 만약 merge를 취소하고 싶다면,
$git merge --abort
아니면 merge를 진행하려면,아래와 같이 사용하고
$git merge --continue
continue 뒤에 아래 캡처처럼 왜 merge가 필요한 commit 인지 메시지를 적으라는 내용이다.
해당 메시지를 적으려면
10.merge에 성공했다면 아래 그림처럼 된다.
로그를 확인해보면($git log --online), 커밋이 4개 있는 것을 확인할 수 있다.
$git checkout dev
$git merge main
main 브랜치와 merge 했을 때 Fast-forward 전진한 것을 볼 수 있고,
2 insetions(+), 1 deletion(-) 의 의미는
merge 전, dev 브랜치 aaa.txt의 333 이 merge 이후에도 유지되는 것이 아니라 333 삭제하고 다시 333을 추가한 것.
모든 내용과 자료는 "스프링의 정석 : 남궁성과 끝까지 간다" 참고하였습니다.
출처 : https://fastcampus.co.kr/dev_academy_nks