git rebase

미키오·2023년 1월 1일
0
post-thumbnail

what is git rebase?


1차 프로젝트를 진행하면서 본격적으로 git과 github로 협업을 하게 되었다.
그 과정에서 각자 브랜치에서 만든 커밋들과 충돌이 뒤엉키면서 위와 같이 쓸데없는 코드가 많이 생겼다.
더 고급스럽고 깔끔하게 해결하는 방법이 있지 않을까 하는 의문이 생기던 찰나
2차 프로젝트 때부터는 git rebase를 사용하게 되었다.

git rebase란, 묵은 커밋을 방금 한 커밋처럼 이력을 조작하여 로그가 선형적으로 보이게 하는 기법이다.
정리하자면, 이전에 만든 코드를 기준으로 만들었던 브랜치를, 마치 최신 코드를 기준으로 만든 것처럼 이력을 조작해서 시치미를 뚝 떼는 것이다. 만약에 충돌이 생긴다면 이력을 조작하는 중간에 조용히 고쳐주면 된다.
다시 말해, 위의 예시 그림에서와 같이 팀원B가 작업한 master 커밋1,2를 똑 떼서, 뗀 커밋 가지를 팀원 A의 커밋가지에 한 줄로 이어 붙이는 것이 바로 git rebase이다.

how to git rebase

1. git checkout main

로컬의 메인 브랜치로 넘어간다.

2. git pull origin main

로컬의 메인 브랜치에서 원격 브랜치의 메인 내용을 git pull로 최신화한다.

3. git checkout <작업 브랜치>

다시 작업하던 브랜치로 돌아와서

4. git rebase -i main

리베이스를 진행한다.
이때 pick을 s나 squash로 변경하여 불필요한 커밋을 정리한다.

정리 후에는 esc를 누르고

:wq

로 탈출한다.

5. resolve conflict

만약, conflict가 발생하면 고쳐주면 된다. 리베이스 진행 중에는 자연스러운 현상이니 너무 당황하지 말자.

6. git add .

다시 git add .를 하고

7. git rebase --continue

git rebase를 진행시켜주면 된다.

8. git log 로 확인

위 7번에서 continue할 것이 없다는 로그가 확인이 된다면 이후 작업을 진행하면 된다.


이후 다시 깃허브에 올릴 때는

git push origin <작업브랜치> -f

로 강제 푸쉬를 이용해야 한다. 이력을 조작하고 푸쉬를 하는 것은 다른 개발자에게 위험한 행위여서 이력을 조작하면 -f라는 특수한 옵션을 붙여서 푸쉬해야 한다.
누누히 말하지만.. push는 신중히..

profile
교육 전공 개발자 💻

0개의 댓글