위코드 초반에 두리님이 만들어주신 빙고게임을 이용해서 첫 번째 rebase실습을 진행하였고 땅따먹기 충돌실습했던 것을 이용해서 두 번째 rebase실습을 진행하였다.
원래 commit을 한 순서대로 나열이 되어야 하는데 순서대로 나열되게 하기 위한 실습이 첫 번째.
두 번째는 squash를 이용해 commit 메세지를 한 개만 남기는 rebase 실습.
나는 iterm(terminal)에서 진행했지만 vscode에디터에서도 가능하다.
그러나 터미널과 친해지고 싶다면 터미널 추-천 꾹
1차 실습 때 쓰던 merge commit과 rebase의 다른 점
merge commit
-장점: 나 혼자 편하게 올릴 수 있다.
-단점: 커밋 메세지가 지저분하다
rebase
-장점: 커밋마다 충돌을 해결 해 나가야 하기 때문에 기억이 안나는 과거의 코드를 손봐야 할 수도 있고 여러개의 커밋을 모두 rebase해줘야 하기 때문에 매우 귀찮거나 힘들 것이다.
-단점: commit 메세지가 한 개만 남기 때문에 깔끔하다.
clone을 받는다.
git clone 주소
브랜치를 딴다.
git checkout -b 브랜치이름
빙고가 적힌 README.md 고치기
vi README.md
i (=insert 적을 수 있게) - 고치기 - esc(적기 끝) - :wq (나가기)
git status로 상태 확인하고
(md=mark down)
첫 번째 커밋까지 만!!! 하기
git add .
git commit -m "설명"
master이동하고 새로 브랜치 따기
브랜치에서 브랜치 따면 안된다.
master에서 브랜치 따야 한다.
git checkout master
git checkout -b 새 브랜치 이름
새 브랜치에서 README.md고치기
vi README.md
3,4번 그대로 하기
나중에 commit한 브랜치에서 push 먼저 하기
git push origin practice2(또는 두 번째 브랜치 이름)
branch 확인하고 첫 번째 브랜치로 이동 (같은 마스터 다른 브랜치로 이동은 굳이 master 갔다가 이동하지 않고 바로 이동해도 된다.)
git status
git checkout practice1(또는 첫 번째 branch 이름)
첫 번째 branch에서 push하기
git push origin practice1
conflict를 위해 master로 이동해서 pull 받기
git checkout master
git pull origin master
나중에 commit한 첫 번째 branch로 가서 rebase하겠다고 선언하기
git checkout 첫 번째 브랜치
git rebase master
README.md가서 conflict고치기
vi README.md
! 꿀 팁 ! 삭제는 입력모드가 아니면서. 영어키 일 때 dd연속으로 누르면 한 줄 자동으로 사라진다. 힘들게 지우지 말자!
\
13. 상태확인
git status
를 하면 여태까지의 git status는 commit 할 부분이 있는 지 확인하는 용도였는데 여기에서는 rebase를 해야 하는지 아닌지를 확인 할 수 있다.
여기에서는
이렇게 나와야 정상.
rebase 계속 하기 위해서
git add .
-네 맞습니다. add해야 합니다!
git rebase --continue
고치고 나서
git push origin 첫번째브랜치 --force
-> 여기서 --force를 하는 이유 : 그냥 push하면 pull 받고 push 하라고 뜨는데, 시키는 대로 pull 받고 push하면 같은 상황 또 반복 반복 무-한-반-복 상황이 오니까 힘으로 강요해줘야 한다. 뒤에서 밀어줘 --force
!!!
땅따먹기 하던 github에서 클론 받아 실습의 준비를 한다.
땅따먹기 페이지 master로 들어왔다면 브랜치 하나 까기
git checkout -b first
첫 번째 커밋 만들기
vi README.md
i - 고치고 - esc- :wq
상태확인도 한 번 git status
요래 나오면
git add .
git commit -m "first commit"
커밋까지만! 여기까지만 하고 두 번째 커밋 만들자~
두 번째 커밋 만들기
vi README.md
들어가서 이제는 익숙할 고치기-모른다면 2번 보기~!
git add .
git commit -m " second commit"
세 번째 commit 2번 처럼 하고 커밋 메세지만 다르게
git commit -m "third commit"
자- 이제 세개의 commit준비 완료!
내가 3개의 commit을 만드는 동안 다른 사람의 branch에서 master로 merge가 일어났으니
rebase에서 커밋 하나하나 충돌을 해결 해 나가야 한다.
준비 되었는가-
세개의 커밋에 대해서 push하지 않고 master 이동
git checkout master
git log
로 확인하기
rebase 시작
git rebase -i master 브랜치 이름
(i는 interacive의 약자인데 squash하고 싶을 때 사용하는 것으로 내가 직접 참여한다는 의미이다.)
이렇게 나올 것이다.
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이 보인다!
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하기