[+43]rebase 실습

AeRi Lee·2020년 3월 10일
1

배경

위코드 초반에 두리님이 만들어주신 빙고게임을 이용해서 첫 번째 rebase실습을 진행하였고 땅따먹기 충돌실습했던 것을 이용해서 두 번째 rebase실습을 진행하였다.

원래 commit을 한 순서대로 나열이 되어야 하는데 순서대로 나열되게 하기 위한 실습이 첫 번째.

두 번째는 squash를 이용해 commit 메세지를 한 개만 남기는 rebase 실습.

나는 iterm(terminal)에서 진행했지만 vscode에디터에서도 가능하다.
그러나 터미널과 친해지고 싶다면 터미널 추-천 꾹

1차 실습 때 쓰던 merge commit과 rebase의 다른 점
merge commit
-장점: 나 혼자 편하게 올릴 수 있다.
-단점: 커밋 메세지가 지저분하다

rebase
-장점: 커밋마다 충돌을 해결 해 나가야 하기 때문에 기억이 안나는 과거의 코드를 손봐야 할 수도 있고 여러개의 커밋을 모두 rebase해줘야 하기 때문에 매우 귀찮거나 힘들 것이다.
-단점: commit 메세지가 한 개만 남기 때문에 깔끔하다.

첫 번째 실습

  1. clone을 받는다.
    git clone 주소

  2. 브랜치를 딴다.
    git checkout -b 브랜치이름

  3. 빙고가 적힌 README.md 고치기
    vi README.md
    i (=insert 적을 수 있게) - 고치기 - esc(적기 끝) - :wq (나가기)
    git status로 상태 확인하고
    (md=mark down)

  4. 첫 번째 커밋까지 만!!! 하기
    git add .
    git commit -m "설명"

  5. master이동하고 새로 브랜치 따기
    브랜치에서 브랜치 따면 안된다.
    master에서 브랜치 따야 한다.
    git checkout master
    git checkout -b 새 브랜치 이름

  6. 새 브랜치에서 README.md고치기
    vi README.md 3,4번 그대로 하기

  7. 나중에 commit한 브랜치에서 push 먼저 하기
    git push origin practice2(또는 두 번째 브랜치 이름)

  8. branch 확인하고 첫 번째 브랜치로 이동 (같은 마스터 다른 브랜치로 이동은 굳이 master 갔다가 이동하지 않고 바로 이동해도 된다.)
    git status
    git checkout practice1(또는 첫 번째 branch 이름)

  9. 첫 번째 branch에서 push하기
    git push origin practice1

  10. conflict를 위해 master로 이동해서 pull 받기
    git checkout master
    git pull origin master

  11. 나중에 commit한 첫 번째 branch로 가서 rebase하겠다고 선언하기
    git checkout 첫 번째 브랜치
    git rebase master

  12. README.md가서 conflict고치기
    vi README.md

! 꿀 팁 ! 삭제는 입력모드가 아니면서. 영어키 일 때 dd연속으로 누르면 한 줄 자동으로 사라진다. 힘들게 지우지 말자!
\
13. 상태확인
git status를 하면 여태까지의 git status는 commit 할 부분이 있는 지 확인하는 용도였는데 여기에서는 rebase를 해야 하는지 아닌지를 확인 할 수 있다.

여기에서는

이렇게 나와야 정상.

  1. rebase 계속 하기 위해서
    git add . -네 맞습니다. add해야 합니다!
    git rebase --continue

  2. 고치고 나서
    git push origin 첫번째브랜치 --force
    -> 여기서 --force를 하는 이유 : 그냥 push하면 pull 받고 push 하라고 뜨는데, 시키는 대로 pull 받고 push하면 같은 상황 또 반복 반복 무-한-반-복 상황이 오니까 힘으로 강요해줘야 한다. 뒤에서 밀어줘 --force !!!


두 번째 실습(한 개의 브랜치로 여러개 커밋한거 하나로 줄이기)

땅따먹기 하던 github에서 클론 받아 실습의 준비를 한다.

  1. 땅따먹기 페이지 master로 들어왔다면 브랜치 하나 까기
    git checkout -b first

  2. 첫 번째 커밋 만들기
    vi README.md
    i - 고치고 - esc- :wq
    상태확인도 한 번 git status

    요래 나오면
    git add .
    git commit -m "first commit"
    커밋까지만! 여기까지만 하고 두 번째 커밋 만들자~

  3. 두 번째 커밋 만들기
    vi README.md
    들어가서 이제는 익숙할 고치기-모른다면 2번 보기~!
    git add .
    git commit -m " second commit"

  4. 세 번째 commit 2번 처럼 하고 커밋 메세지만 다르게
    git commit -m "third commit"

자- 이제 세개의 commit준비 완료!

내가 3개의 commit을 만드는 동안 다른 사람의 branch에서 master로 merge가 일어났으니
rebase에서 커밋 하나하나 충돌을 해결 해 나가야 한다.
준비 되었는가-

  1. 세개의 커밋에 대해서 push하지 않고 master 이동
    git checkout master
    git log 로 확인하기

  2. rebase 시작
    git rebase -i master 브랜치 이름
    (i는 interacive의 약자인데 squash하고 싶을 때 사용하는 것으로 내가 직접 참여한다는 의미이다.)


이렇게 나올 것이다.

  1. 커밋 마다 충돌 해결해 나가기
    vi README.md
    git status

2 remaining commands...2개 더 고쳐야 한다.
git add .
git rebase --continue

이렇게 떴으면
vi README.md
고치기
git status

git add . 반복...
git rebase --continue

치면 1,2,3 커밋 메세지가 모두 나오는데

첫 번째 commit 메세지 앞에 p 또는 pick
나머지 commit 메세지 앞에 s 또는 squash
써주고
지금 화면처럼 생겨야 하는데 커밋 메세지와 Commands 줄 사이에 무엇인가 더 있을 수 있다. 4줄정도 삭제해주면 위의 사진처럼 될텐데
빠른 한 줄 삭제는 뭐다? (입력상태가 아니면서 영어 타자일 때) dd 누르면 빠르게 삭제 가능하다!

이제 또 고치기
vi README.md
git status

이렇게 나오면

세 번째 가즈아-

git add .
git rebase --continue

라고 나오면

vi README.md
git status
->last commands done이 보인다!

  1. 더이상 rebase할 것이 없나 확인해보자

git add .
git rebase --continue (continue할 게 없지만 이렇게 쓰면서 확인할 수 있다)


음 이렇게 나오면 rebase끝났다는 의미@

git status


깔끔깔끔

git push origin 브랜치 이름

끝!!!!!

모두 고생 많으셨습니다~!!!!!


앞으로 할 때
--

feature에서 commit 까지 하고
master pull
feature에서 git rebase -i master

하는 방식으로 하자.
안전하게@
master는 pull만 받고
feature에서 rebase하자
rebase끝나고 push 전에 npm start로 확인하고 push하기

profile
👩🏻‍💻 Junior Web Frontend Developer

0개의 댓글