[Git&Github] Git Merge와Rebase 그리고 충돌 해결하기

devCecy·2020년 12월 29일
6

Git & Github

목록 보기
5/6
post-thumbnail

Merge & Rebase

Merge와 Rebase는 모두 한 브랜치에서 다른 브랜치로 병합하지만, git commit history 순서에 차이가 있다.

Merge

Git Merge는 시간 순서에따라 다른 브랜치의 커밋까지 다 내가 작업하던 브랜치로 들어와 버린다.

시간 순서대로 commit 기록이 남으면,

- 불필요한 merge commit 생성
모든 feature branch마다 머지커밋이 남기때문에, 프로젝트의 규모가 크다면, 브랜치 히스토리가 지저분해지기 쉽다.

- 복잡한 history
복잡한독립된 브랜치에 로직 하나를 작성하고 수정하더라도, 다른 작업과 그 내역이 겹쳐 구분하기 어려워 집니다. 이런 상황을 프로젝트의 히스토리가 복잡하다고 표현합니다.

Rebase

Git Rebase는 자신이 작업하고 있는 브랜치의 commit이 최상단으로 나타나고, 다른 브랜치들도 각각 자신의 브랜치로 묶여 commit history가 남는다.

Squash

여러개의 commit 메세지를 하나로 합치는 기능, commit이 깔끔해 질 수 있다.

  • 기존에 작업하던 브랜치를 remote에 푸쉬하기 전 메인으로가서 풀 받는다.
  • 작업하던 branch로 checkout하고 git rebase -i main을 해준다.
  • 그럼 그동안 작업했던 커밋메세지를 보여주는데, 그 중 가장 오래된 커밋을 픽하고 가장 오래된 커밋을 기준으로 Squash 한다(pick을 s로 바꿔줌).
  • Squash를 하고 나면, 수정용 에디터가 나오는데 그동안 적은 모든 커밋이 적혀있다. 그 중 하나를 골라도되고, 혹은 새로운 커밋 메세지를 적어주면 된다.
    [Add] 로그인 페이지 -레이아웃 구현 -기능 구현 이런식으로 길게 적어줘도 된다!
  • 성공하면 git log로 깔끔해진 커밋메세지를 감상한다. 그리고 push한다. ❣️

Rebase 충돌 해결하기

충돌이 일어날 경우, Rebase가 진행되지도, 끝나지도 않고 도중에 멈춰있게된다.

이럴 경우,
1. 충돌에 해당하는 코드를 수정 후 git add .
2. git rebase --comtinue를 입력하면 멈춰있던 rebase가 진행된다.
3. 충돌이 여러번 일어나면 그 때마다 충돌을 해결하고 git add . > git rebase --continue를 반복한다. 커밋한 만큼 오류가 날 것이다,,
4. git commit --amend로 최상단 메세지만 남기고 다 지워주고,
5. git push origin feature/이름 해주면,
6. 또 오류가 난다? 그렇다면 git push origin +feature/이름
4. 그래도 해결이 안되면, git rebase --abort로 rebase를 진행하기 전 상황으로 돌아갈 수 있다.

profile
🌈그림으로 기록하는 개발자🌈

0개의 댓글