브랜치에 각각 신규 커밋이 1회 이상 있는 경우
merge 명령을 내리면 두 브랜치의 코드를 합쳐 새로운 커밋을 자동으로 생성해줌

이걸 3-way merge라 부르고, git merge 브랜치명 했을 때의 기본 동작 방식입니다.
가끔 새로운 브랜치에만 커밋이 있고
메인 브랜치, 혹은 기준 브랜치에 신규 커밋이 없을 때가 있음

이 경우 merge 명령을 내리면 "fast-forward merge 됐어 ㅇㅇ" 라고 알려줍니다.
별건 아니고, 딱히 합칠게 없어서 그냥 새로운 브랜치 보고
"지금부터 니 이름은 메인 브랜치여"" 하는 것입니다.
브랜치를 삭제하려면
아무렇게나 merge 해도 브랜치가 자동으로 삭제되진 않는다.
git branch -d 브랜치이름git branch -D 브랜치이름이러면 필요 없는 브랜치를 삭제할 수 있습니다.
merge가 완료된 브랜치 삭제 시엔 -d 이것만 해도 되는데
merge 없이 그냥 브랜치를 삭제하려면 -D 이거 해야함
일단 rebase가 뭐냐면

브랜치의 시작점을 다른 커밋으로 옮겨주는 것이다.
주의
일반 merge 시엔 메인 브랜치로 이동했었는데
rebase 하려면 해당 브랜치로 이동해야 함!
git rebase main 하면 됨git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치
물론 단점도 있는데
충돌이 많이 발생할 수 있는데 그거 하나하나 해결하기 귀찮음.
님들 님들.. 대충 그냥 3-way merge 해버리면

이런 대참사가 날 수 있음;
이게 왜 대참사냐면
1. 3-way merge 된 것들은 매우 복잡해 보임
2. 메인 브랜치에서 git log 출력해보면 3-way merge된 브랜치들의 커밋 내역도(쓸데없는 커밋) 다 같이 출력돼서 더러워짐
이러기 싫으면 rebase 아님 squash and merge 하면 됩니다.
이거 쓰면 새로운 브랜치에 있던 커밋들을 연결해주는게 아니라 똑 떼와서 메인 브랜치에 붙여주기 때문에
위에 1, 2번 걱정을 안해도 됩니다.
아무튼 squash는 뭐냐면
3-way merge랑 다르게 새 브랜치에 있던 커밋들이 메인 브랜치로 텔포합니다.

이제 메인 브랜치에서 git log 했을 때 merge 된 브랜치의 커밋 같은 것들은 출력되지 않습니다.
이게 왜 좋은거냐고요?
님들이 직접 해봐야 체감 되는거라 3-way merge 많이 해보든가 하십숑
git switch main
git merge --squash 브랜치명
git commit -m "commit msg"
그냥 merge 할 때 --squash 만 추가하면 끝입니다.
merge 했을 때
merge --squash 했을 때
결과는 둘 다 똑같은데 한 놈은 선으로 이어져있고 한 놈은 텔포했을 뿐입니다.
강의 출처