
기존의 merge 전략
git add .
git merge 브랜치명 --no-ff -m "commit message"
위의 명령어 입력을 통해 merge commit 할 수 있다.
💡
--no-ff :작업 기록을 남기고 하겠다는 의미

Git에서 개발자들이 브랜치에서 작업한 커밋(예: #1, #2, #4)을 ➡︎ 다른 브랜치(예: master)에 merge 할 때, Git은 변경 사항을 결합하고 이를 기록하기 위해 새로운 Merge Commit(예: #5)을 생성한다.
💭 만약, 2사람 이상이 기존 base line (예: master)에서 변경 후 merge를 한다면?
➡︎ 위의 사진과 같이 History가 복잡해진다.
새로운 Merge Commit은 언제, 어떤 브랜치가 통합되었는지 나타내기 때문에 여러 기능들을 언제 제작하였는지 정확히 알리고 싶을 때 사용한다.
Ex> main에 dev 배포 날짜를 정확히 표시할 때
merge commit으로 충돌 해결 시 History가 점점 복잡해진다.

여러 개의 커밋을 하나의 커밋으로 합치는 작업을 의미한다. 주로 불필요하게 쪼개진 커밋이나 동일한 부분에 대한 반복된 커밋을 정리할 때 사용한다.

➡︎ 합칠 Commit들을 선택한 후 Squash commit을 누르면 된다.
기준 브랜치를 기준으로 다시 기준열을 맞추는 방법이다.

기준 브랜치(master)에서 브랜치 A가 분기된 후, 사진의 1번 과정과 같이 master에 새로운 커밋(변경 사항)이 추가된 후 Merge되면, 브랜치 A는 master의 최신 상태에 맞춰 커밋을 rebase해야 한다.

[브랜치 A 만들기]
git switch -c 브랜치명 🟢 브랜치 생성 및 이동
[최신 상태 반영하기]
git rebase 기준 브랜치명 🟢 만든 브랜치에서 변경된 기준 브랜치 rebase하기
➡︎ rebase를 하고 난 이후 브랜치 A의 코드 PR을 진행하고 Merge 한다.
아래 사진과 같이 Rebase로 Merge 가능하다.
충돌 해결 후
git rebase --continue 🟢 rebase 완료하기
를 했을 때, Successfully가 뜨면 충돌 해결
➡︎ 이후 push 시도를 할 때 remote와 기준 브랜치의 코드 내용이 다르기 때문에 강제 push를 해주어야 한다
git push --force 🔴강제 push
⚠️강제 push를 하면 원격 브랜치의 기존 커밋 히스토리를 덮어쓰기 때문에, 팀원과의 협업 시 다른 작업이 손실될 수 있다.
따라서, 항상 모든 사람들이 기준 브랜치와 싱크를 맞춰야한다.
🟢 Merge Commit VS Rebase 🟢
기준 브랜치는 새로운 Merge Commit을 만들어서 병합 작업을 진행하지만, Rebase는 기준 브랜치에 맞춰 재 정렬을 한다.
📢 Rebase의 경우 복잡한 Command가 들어가지만 History 파악이 쉬워진다.
dev에서 특정 commit 내용을 빼고 main에 배포해야 할 때 사용한다. 즉, 특정 부분만 제외하고 Cherry Pick 해서 배포용 브랜치에 반영한다. (release 할 때)



dev의 브랜치에서 위의 사진과 같이 Cherry Pick 하여 다른 브랜치(배포용 브랜치)에 적용하고 해당 배포용 브랜치를 main 브랜치에 merge하면 아래 사진과 같이 main 브랜치가 변경된다.
dev 브랜치에서는 변경된 main에 맞춰 rebase를 진행하게되고 최종적으로는 아래와 같이 변경되는 것을 확인할 수 있다.
git cherry-pick --abort 🟢Cherry Pick
를 입력하여 중단할 수 있다.

아래 사진과 같이 충돌이 발생하면

각 파일에서 충돌을 해결한다.
git add . 🟢 충돌 해결 후 파일 저장
git cherry-pick --continue 🟢 Cherry Pick 완료
발생했던 오류들도 기록으로 남기는 것이 중요하기 때문에 남기는 것이 좋다.

Revert: 기존 오류 작업 Commit을 남겨두고 되돌리는 것
Reset: 이전 Commit 기록으로 되돌리는 것

💡 Reset을 누르면 아래와 같은 창이 뜬다.
상황에 따라 선택에서 Reset을 하면된다. ➡︎ 나중에 사용하게 될 경우 찾아서 적용
stash
push를 해야할 때, 브랜치를 변경하고 싶을 때 현재 브랜치에 애매하게 변경된 사항들이 있거나 Commit을 하기 싫은 경우 stash를 이용해 코드를 임시 저장한다.
git stash 🟢임시 저장
git stach pop 🟢꺼내기
임시 저장된 코드를 꺼내고 싶을 때는 pop을 하면 된다.
너무 좋은글 ^^ 잘봤습니다