>session: git rebase

yeeun lee·2020년 5월 11일
2

1. merge 방법

merge commit

branch를 만들어서 작업하다가 나보다 미래 시점에 있는 master에 합치면서 새로운 merge commit이 생기는 것. 내가 만든 commit이 쌓여서 한번에 master에 적용된다.

fast forward merge

branch에서 작업하는 동안 다른 수정 사항이 없을 때. 내가 수정사항을 넣긴 했지만, 결국 branch가 하나만 있었던 상황이다.

rebase

master base를 과거에서 내 master보다 미래 시점으로 다시 설정하면서 branch와 연결하는 것. 합쳐지면서 새로운 것이 생기는게 아니라, 내가 만든 commit들을 rebase에 쌓게 된다.

- merge가 쉬운데 왜 rebase를 할까?

history를 깨끗하게 하기 위해. merge commit이 많으면 지저분해진다. rebase는 한 줄로 깔끔하다. commit history를 보는 것이 쉬워진다.

conflict는 훨씬 많이, 어렵게 난다. 옮긴 rebase에 commit을 하나씩 올리는데, 내가 기억하는 코드는 마지막 commit이기 때문에 기억하기 어렵고 내가 commit 20번 하면 conflict가 20개가 생길 수도 있다. 심지어 내가 쓴 코드가 날아갈 수도 있다!

- squash

commit을 하나로 만든다음에 rebase를 만드는 것. revert가 쉽다.

2. rebase 방법

  1. git checkout master

  2. git pull origin master

  3. rebase는 마스터, 내가 작업하던 branch에서 해도 무방하다.

  4. 마스터에서: git rebase -i(interactive 모드) master feature/pjh
    branch에서: git rebase -i master

enter 치면 pick할 수 있고, option이 나온다. squash는 최초 commit부터 그 다음, 그 다음으로 순서대로 합쳐지는 것이다.

  1. pick을 s로 바꿔주면 squash를 하게 된다. (제일 위에는 남기기 pick-s-s) 그 뒤 저장 후 종료한다.

  2. conflict가 있으면 메시지가 뜬다. 파일에 들어가면 수정할 내용들이 있다. 수정하고 git에게 알려준다.

  3. git add . (commit을 따로 하지 않는다. squash로 commit이 발생하는 것이기 때문에)

  4. git rebase --continue
    git rebase -- abort (rebase 중단)

  5. conflict 다 해결되면 commit message를 하나로 수정

  6. 종료되면 내가 선택한 branch로 와져있고, commit은 하나로 남아있다.

  7. git push origin feature/yeni

수정사항이 있을 경우 master에서 다시 pull한다음에 rebase 시작.
push해서 올린거랑 rebase로 기준 바꾼거랑 git이 혼동할 경우 내가 결정하라는 안내가 뜬다.

명령어: git push origin feature/yeni -f (forced update )

결과에서 commit message는 1개여야 한다.

profile
이사간 블로그: yenilee.github.io

0개의 댓글