git 에서 한 브랜치에서 다른 브랜치로 합치는 방법론 2가지가 있다 .
1. merge
2. rebase
먼저 git으로 파일을 날려 본적이 많기에 '백업'먼저 하자.
작업폴더를 그대로 복사 붙여넣기 해도 되지만 터미널을 이용해 백업폴더를 만들어보자.
작업폴더 '이전폴더'로 가서 아래와 같이 입력해준다.
cp -rpv 작업폴더명 백업폴더명
ex) cp -rpv 1st-project 1st-project-backup
이런식으로 하면 터미널에서 고대로 복사를 하기 시작한다 . (주루루루루루룩 나온다면 제대로 복사하는게 맞다. )
일단 local의 master를 최신화 시켜주는게 최.우.선 이다.
githup에 master를 pull 해오자 (아래처럼)
git pull origin master
다시 작업 branch로 이동 !
그럼 이제 rebase를 시작해보자
작업폴더에 터미널을 띄우고 아래와 같이 작성하자.
- git add . (작업내용 추가)
- git commit (작업내용 커밋)
- git rebase -i master (작업내용 local master와 병합)
master merge와 별 다를게 없는데 ? 굳이 왜 하지??
rebase는 여태껏 commit 한 내용들을 깔끔하게'도' 정리할 수 있다.
지금까지 commit한 내용들이다 .
위에 'pick'이라고 적혀있는것만 보면 된다 . '#' 표시가 된건 주석이라 아무의미 없는것이니 넘어가자.
여기서 주의 깊게 봐야할것은 s (squash)다.
내용을 보자면 커밋을 사용하되 , 이전 커밋에 녹아들게 한다는 뜻인데
즉 , 최상단 커밋은 가만히 놔두고 2번째 부터 나머지 커밋들 앞에 pick > s 로 변경해준다
- 작성을 하려면 i 를 누르면 하단부분에 --INSERT--라고 나오는데 터미널에서 작성이 가능하다.
- 작성 후엔 esc 눌러서 :wq(저장 후 나가기) :q (나가기) 로 나가면 된다.
위 처럼 s (squash)로 변경후 :wq로 저장후 나가기 하면 다음과 같은 화면이 나온다.
자 여기서 '#'은 뭐다?
주석이다
😎 거슬리면 지워버리자
화면에 나온건 지금껏 커밋했던 내역들이다 .
전체 다 삭제 해주고 커밋내용을 새로 작성 해주자.
삭제는 어떻게 하냐구요??
지우고자 하는 란에 가셔서 DD 눌러주시면 한줄 삭제가 됩니다 !
여기서 다시 :wq 저장후 나가면
Successfully rebase가 됐다고 나옵니다.
그러면 rebase 성공 !!!
rebase에 성공을 하면 이제 마지막 push 가 남았습니다.
push에서 아무이상이 없다면 github에 Pull Request-> commit이 1개로 줄어있는걸 보실수 있습니다.!!
push에서 이상이 있다면
git push origin 브랜치명 --force
이렇게 강제로 push해 주시면 됩니다.
접근방법이 다르다고 git에서 알려주는건데
본인이 rebase하면서 commit 등 수정사항등을 알기 때문에 push 하는것 입니다.
참조 : 위코드 git rebase 세션