본문 바로가기
Git/GitKraken

GitKraken - 2 ( merge / reset & revert)

by 완두완두콩 2022. 1. 26.

저번 GitKraken - 1 에서 간단한 커밋과 브랜치를 생성해보았습니다.

이번에는 두 브랜치간의 merge 를 해보려 합니다.

 

(참고)

https://dodokong.tistory.com/entry/GitKraken-1-%EC%BB%A4%EB%B0%8B-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EC%83%9D%EC%84%B1?category=1256909

 

GitKraken - 1 ( 커밋 , 브랜치 생성)

Git 에 대한 기본 개념은 어느정도 이해가 됐으나 뭐든지 해보지 않으면 제대로 안다고 할 수 없기에.. 원활한 협업을 위해 GitKraken GUI 를 사용해서 Git 에 대해 좀 더 자세히 이해해보고자 합니다.

dodokong.tistory.com

 

 

Merge


다시 feauture 브랜치로 checkout 한 후 , 파일을 일부 수정하여 다시 commit 을 합니다.

 

추가된 18번째 줄

참고로 다음과 같이 코드를 보고 , 원하는 부분의 코드만 stage 할 수 있습니다!

수정된 부분을 커밋 하면 , 다시 새로운 commit 이 생성됩니다.

현재 master 브랜치에서는 다음과 같은 코드를 볼 수 없습니다.

이를 master 브랜치에서도 보기 위해서는 merge 가 필요합니다.

merge

위의 그림과 같이 , 두 브랜치가 합쳐지는 과정이 merge 인데 merge 에는

기본 Merge 와 Rebase and merge 가 있습니다.

 

우선 , merge 를 할 때 기준이 되는 branch 로 checkout 을 한 뒤 , (저의 경우에는 master) feature 브랜치에 오른쪽 클릭을 하거나 ... 세개를 누르면 다음과 같은 옵션이 나옵니다.

3번째에 Merge feature into master 를 선택해보도록 하겠습니다.

이렇게 하면 master 브랜치에 새로운 커밋이 생성됨을 확인할 수 있으며 ,

feature 브랜치의 f2 커밋과 m1 커밋이 연결됨을 가시적으로 확인할 수 있습니다.

 

이렇게 merge 를 하게 되면 , 아까 master 로 checkout 했을 때에 보이지 않던 17. 18 줄이 보이게 됩니다.

 

 

Rebase and Merge

다음과 같은 경우가 Rebase and merge 입니다.

Rebase and merge 는 기존의 두개였던 브랜치를 하나로 합침과 동시에 , 새로운 커밋을 만드는 것이 아닌 다른 브랜치에 있던 커밋을 그대로 해당 브랜치에 붙이게 됩니다.

 

이렇게 되면 feature 브랜치는 필요없어지므로 해당 브랜치를 삭제하면 됩니다.

Rebase and merge 결과

 


실수 없이 병합했다면 상관 없지만 만약 방금 했던 merge 를 없던 일로 다시 되돌리고 싶은 경우에는

어떻게 하면 될까요?

RevertReset 두가지 방법이 있습니다.

 

우선 Revert 를 하게 되는 경우 , 취소하고자 하는 쪽의 브랜치로 checkout 해서 revert commit 을 실행합니다.

예를 들어 , 지금 수정한 코드를 다시 feature 에만 남기고 master 에서는 지우겠어! 라고 하는 경우

master 브랜치로 checkout 한 뒤 , revert commit 을 진행합니다.

 

그럼 다음과 같은 로그가 남겨지며 코드를 확인해보면 , 현재 체크아웃한 브랜치에서(master) 해당 코드가 사라져있음을 알 수 있습니다.

 

그렇다면 Reset 은 뭘까요?

 

Reset 에는 hard, soft, mixed 총 3가지 옵션이 존재합니다.

 

hard 는 merge 했던 일 자체를 지워버리는 것입니다. 로그조차도 남지 않기 때문에 협업 시에는 사용하지 않는 것이

바람직 할 것 같습니다.

 

sotf 는 merge 전의 상태로 되돌리되 , stage 상태로 만들어서 reset 시킵니다. 이 경우 commit 만 하면 바로 커밋 이력이 생성됩니다.

 

mixed 도 이력이 되돌려지지만 , unstaged 상태로 되돌려버리기 때문에 다시 stage 하고 commit 해야합니다.

 

그렇다면 언제 reset을 하고 언제 revert를 해야하나?

단순하게 생각하면 reset을 하는 것이 revert를 하는 것보다 이력을 더 단순하게 만들어주기 때문에 revert의 장점이 많지 않아 보입니다.

하지만 이력 중간에 로그 출력하도록 한 커밋이 있고 그 커밋만을 취소하려고 한다면 reset을 사용하여 이후의 이력을 모두 제거하는 것은 이후 이력을 모두 날려버리는 결과를 나을 것입니다.

이런 때 revert를 사용하여 해당 커밋의 내용만 되돌릴 수 있습니다. 또한 이미 원격 레파지토리에 push 를 한 상태라면 reset을 사용하면 reset 하기 이전으로 되돌리기 전까지는 push 할 수 없게됩니다. (물론 force라는 무시무시한 옵션이 있기는 합니다. ) 그래서 이미 push 한 코드라면 미련을 버리고 revert를 하셔야 합니다.

 

 

 

'Git > GitKraken' 카테고리의 다른 글

GitKraken - 1 ( 커밋 , 브랜치 생성)  (0) 2022.01.26

댓글