본문 바로가기
Today I learned

2021 06 01 - git린이의 모험 cherry-pick & rebase

by soheemon 2021. 6. 1.

커밋 타임라인의 순서를 마음대로 재단할 수 있도록 해주는 명령어들!

 

cherry-pick은

topic branch의 특정 commit의 변경사항만

가져올 수 있는 명령어이다..!

예를들어서, master branch에서 t1을 cherrypick 한다는것은, t1의 snapshot을 그대로 가져오겠다는것이 아니라, t1의 변경된 부분만을 master branch로 가져와서 새로운 commit을 만들겠다는 의미이다.

 

Rebase

base가 되는 커밋을 변경하겠다!

!주의 옮길 commit이 remote에 배포되기 전에만 실행합시다..! 

 

수십, 수만건 머지한다고 생각해보자. 그래프가 아주, 아주 복잡해질것이다.

rebase에서 base는 뭐야아?

--> 공통인 조상이 base인것! 즉 아래의 이미지에서는 C가 base이다!

before

master branch에서 rebase T2 하게되면 BASE commit이 C에서 T2로 변경되는것이다!

after

예를들어,

master branch의 base가되는 commit을 C에서 T2로 변경해보자!

1) git checkout master // 옮겨질 commit이 위치하는 branch로 checkout하자.

2) git rebase topic2 // base를 옮길게!

 

after & before를 비교해보자.

rebase

M1의 base를

c에서 t2로 바꿀때

일어나는 변화

 

M1과 T1의 working copy를 합쳐서  새로운 M1 commit을 만들어낸다.

상단의 m1과 하단의 m1은 변경사항은 같지만. working copy는 다르게 된다. 왜냐 T1과 합쳐졌으니까...

또한 m2도 마찬가지로 t2과 합쳐지면서 새로운 M2 commit을 만들어낸다.

 

merge한 결과와 rebase 한 결과는 같다는것을 기억하자!

 

cherry-pick

충돌의 원인과

해결

https://opentutorials.org/module/4015/24445

 

 

 

댓글