6. Rebase
Why Rebase? (By Progit)
- for 히스토리 단장하기
- Git으로 일하다 보면 어떤 이유로든 커밋 히스토리를 수정해야 할 때가 있다.
- 결정을 나중으로 미룰 수 있던 것은 Git의 장점이다.
- Staging Area가 있어서 커밋할 파일을 고르는 일을 커밋하는 순간으로 미룰 수 있고
- Stash 명령으로 하던 일을 미룰 수 있다.
- 게다가 이미 커밋한 내용을 수정할 수 있다. 거의 모든 것을 수정할 수 있다. 커밋 순서도 변경할 수 있고 커밋 메시지와 커밋한 파일도 변경할 수 있다.
- 여러 개의 커밋을 하나로 합치거나 반대로 하나의 커밋을 여러 개로 분리할 수도 있다.
- 아니면 커밋 전체를 삭제할 수도 있다.
- 하지만, 이 모든 것은 다른 사람과 코드를 공유하기 전에 해야 한다.
1 - rebase 로 병합하기
$ mkdir rebase1
$ cd rebase1/
$ git init
$ touch init
$ git add *
$ git commit -m "init" : workspace 만들고, 초기화, 첫커밋을 해두고 시작.
1. git branch br1
2. git branch br2
3. git checkout br1
4. (chg1.txt 파일 추가)
5. git add *
6. git commit -m "1st change at br1"
7. (chg1.txt 파일 변경)
8. git add *
9. git commit -m "2nd change at br1"
10. git checkout br2
11. (chg2.txt 파일 추가)
12. git add *
13. git commit -m "3th change at br2"
14. (chg2.txt 파일 변경)
15. git add *
16. git commit -m "4th change at br2"
17. git checkout master
18. (master.txt 파일 추가)
19. git add *
20. git commit -m "5th change at master"
21. git checkout br1
22. git branch -u master (필요시)
23. git rebase master
24. git checkout master
25. git merge br1
26. git checkout br2
27. git branch -u master (필요시)
28. git rebase master
29. git checkout master
30. git merge br2
31. git log & gitk
2. Merge 와 Rebase 차이 및 비교 진행 실습
1. 진행 개요
- Master에서 Branch 3개를 각각 생성(chg1~3)한 다음
- Master에서 파일을 변경하고,
- chg1부터 3까지 각각의 Branch에 고유 파일 생성 및 등록을 통해 변경 진행
- 단, 파일 변경 시 Branch 명과 동일 또는 유사하게 생성하고
- Commit 메시지를 "변경순서, 현재 브랜치명" 으로 입력하여 Rebase 및 Merge의 차이점을 확인 할 수 있도록 구성
- Rebase 또는 Merge를 진행 전 해당 폴더 자체를 복제하여 Merge 먼저,그 다음 Rebase를 진행 한 후,
- 각각의 폴더에서 Git log 및 Gitk 명령을 통해 GUI 상태에서 변경 내역을 확인
2. 진행 순서
(1) 공통 작업: 브랜치 생성 및 각각의 브랜치에서 파일 변경 및 Commit 진행
$ git init
(mst1.txt 파일 생성 및 저장)
$ git add *
$ git commit -m "init"
$ git branch chg1
$ git branch chg2
$ git branch chg3
(mst2.txt 파일 생성 및 저장)
$ git add *
$ git commit -m "1st file change at Master"
$ git checkout chg1
(chg1.txt 파일 생성 및 저장)
$ git add *
$ git commit -m "2nd file change at chg1"
(chg1-1.txt 파일 생성 및 저장)
$ git add *
$ git commit -m "3th file change at chg1"
$ git checkout chg2
(chg2.txt 파일 생성 및 저장)
$ git add *
$ git commit -m "4th file change at chg2"
(chg2.txt 파일 수정 후 저장)
$ git add *
$ git commit -m "5th file change at chg2"
$ git checkout chg3
(chg3.txt 파일 생성 및 저장)
$ git add *
$ git commit -m "6th file change at chg3"
여기까지 작업 후 해당 작업 폴더를 복제하여 2개의 폴더로 분리
(2) Rebase
복제 된 폴더 중 하나의 폴더에서 Rebase 진행 진행 중간 중간 git log를 통해 이력의 변화 설명 후 전체 Rebase가 완료되면 gitk 명령을 활용해 GUI환경에서 확인 Upstream문제 발생 시 git branch -u master 실행
1) chg1 branch rebase
$ git checkout chg1
$ git rebase master
$ git checkout master
$ git merge chg1
2) chg2 branch rebase
$ git checkout chg2
$ git rebase master
$ git checkout master
$ git merge chg2
3) chg1 branch rebase
$ git checkout chg3
$ git rebase master
$ git checkout master
$ git merge chg3
(3) Merge 복제 된 폴더 중 하나의 폴더에서 Merge 진행 진행 중간 중간 git log를 통해 이력의 변화 설명 후 전체 Merge가 완료되면 gitk 명령을 활용해 GUI환경에서 확인
1) chg1 branch Merge
$ git checkout master
$ git merge chg1
2) chg2 branch Merge
$ git merge chg2
3) chg3 branch Merge
$ git merge chg3
0 Comments