일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- vue.js
- CompletableFuture
- findTopBy
- Stream
- java
- IntelliJ
- @Transactional Propagation
- HandlerMethodArgumentResolver
- 자바 ORM 표준 JPA 프로그래밍 정리
- 백명석님
- intellij favorites
- #docker compose
- Linux
- ksqldb
- 자바 ORM 표준 JPA 프로그래밍
- ksql
- git
- javascript case
- 마이크로 서비스
- @TransactionalEventListener
- 리눅스
- 친절한 SQL 튜닝
- aws
- 원격 브랜 삭제
- 리팩토링 2판
- JPA
- intellij 핵심 단축키
- multipart테스트
- intellij 즐겨찾기
- Spring Cloud Netflix
- Today
- Total
시그마 삽질==six 시그마
git rebase 본문
1. rebase 정의
Merge를 할때 base를 두 브랜치의 공통조상이 아닌 특정브랜치의 최근 커밋으로 변경해서 한개씩 merge하는것
(re-다시 Base를 정해서 작업하는것)
지정한 브랜치를 베이스로 기준으로 해서 merge하는 방법임
2. rebase 방법 예시
1) feature/c 브랜치로 checkout
git checkout feature/c
head를 c2로 변경
2) master 브랜치로 rebase
git rebase <base_branch> <feature_branch> <---<feature_branch> 생략가능
ex) git rebase master feature/c or git rebase master
master와 c의 공통 조상이 되는 base 커밋부터 현재 브랜치까지의 변경 사항을 구해서 patch로 저장(c1,c2)
head가 master로 변경됨
head가 현재 가리키고 있는 m2에 c1 변경사항을 적용하여 새로운 커밋 c1'이 생성됨
c1'에 c2 변경사항을 적용하여 새로운 커밋 c2'이 생성됨
기존 b->c1->c2 는 날라감
이제 c2가 c2'를 가리킴
3) conflict 발생시
(confilct 해결후) git rebase --continue 해주면됨
(conflict 해결이 안되면 해당 명령어로 merge전으로 롤백) git rebase --abor
ex)
하단에서는 feature/c를(c1,c2) master(m1,m2)로 리베이스한 상황
git checkout feature/c -> git rebase master
c1는 잘나가다 c2에서 컨플릭트남 수동으로 컨플릭트 조정후 조정 잘되면 git rebase --continue 하면됨
조정 실패시 git rebase --abor 하면됨
merge conflict 완료 후 -> git rebase --continue
feature/c의 결과
master를 checkout해서 보면 현재도 딱 m2까지만 있음(변화없음)
4) c 브랜치를 master로 fast-forward merge
(1)git checkout master
(2) git merge feature/c
c를 master로 fast-forward merge하여 완료
a->b->m1->m2->c1’->c2’
다른 예시 ex)
git merge feature/c 후 master log
master push
after push
merge | rebase | |
방법 | 최종 결과로 병합 | 브랜치의 변경사항을 순서대로 다른 브랜치에 적용하면서 합침 |
장점 | -브랜치 히스토리 유지 | -history가 simple해져서(merge commit도 x) 브랜치가 많을때 직관적임 |
단점 | -히스토리 복잡 | -rebase하면서 계속 merge confilct해야함 |
출처 :https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-Rebase-%ED%95%98%EA%B8%B0
인텔리제이 rebase 참고하기 좋은곳 :
https://jjjayyy.tistory.com/56
https://www.jetbrains.com/help/idea/apply-changes-from-one-branch-to-another.html#rebase-branch
==============하단은 인텔리제이를 사용한 git rebase 방법 ===================
한김에 이어서 intellij 로 rebase 하는 방법을 알아보자
위 예시에서 master c2에서 test이라는 브랜치를 새로 만들고 test에는 t1,t2생성, 그리고 master에는 mm1, mm2를 새로 만들었다.
git checkout test
vcs ->rebase
branch는 test
onto는 base 가 될 branch 요기선 master
rebase 클릭시 뜨는 팝업 start rebasing 클릭
merge conflict 뜸..
merge conflict 완료가 되면 하단과 같이 뜸.. continue rebasing 클릭해줌... ( 수정할 필요없음. 요기 사진과 달리 필자는 .. 넣어줬음)
git checkout master
테스트 브랜치에 커서 위치시키고 마우스 우클릭 merge into Current 클릭(git merge test 해준거와 같음)
해준후가 옆에 로그임....
git push 해줌
푸시 후 master log
참고:
같은 방식 다른 ui
test 브랜치로 checkout 한 상태에서 master로 rebase 하고싶을땐
(git checkout test -> git rebase master를 하고 싶을때)
일단 test 계정으로 checkout하고
master 클릭한 상태에서 rebase current onto selected 하면됨
또 참고로
git checkout <my_local_branch_name>
git fetch <another remote_branch>
git rebase <another remote_branch>
(conflict 해결 후) git rebase --continue
(conflict 해결이 안되면 해당 명령어로 merge전으로 롤백) git rebase --abor
git push origin <my_local_branch_name> 이런 초식도 있음
========
커밋메시지 합치기
git rebase -i HEAD~2
https://korband.tistory.com/33
pick 과거
pick 최근
pick 과거
s 최근
wq
커밋메세지 한개 주석
wq
'프로그래밍 > GIT' 카테고리의 다른 글
fork repository에 원본 repository 수정분 반영하기 (0) | 2020.10.18 |
---|---|
git tag (0) | 2020.10.18 |
git 기본 명령어 (2) | 2020.08.20 |
git status , git diff (0) | 2020.08.20 |
git stash (임시저장) (0) | 2020.08.20 |