프로그래밍/Git

[Git] 내가 아는 Git 4 - rebase, reset, stash

showmiso 2020. 8. 26. 18:05

안녕하세요.

Git에서 사용되는 주요 명령어의 마지막 장입니다. 

 


7. Rebase : 재배치

Rebase는 특정 branch의 HEAD를 바꾸는 것입니다.

HEAD를 바꾸면 git 내부에서는 commit 들의 재배치가 일어납니다. 

(HEAD란 branch가 바라보고 있는 마지막 commit을 뜻합니다.)

ui branch의 HEAD는 "Fixed bug"이고, dev branch의 HEAD는 "ver 1.19"입니다.  

 

 

위 사진에서 현재 branch (working branch) 는 dev branch 입니다. 

dev의 HEAD를 ui의 HEAD로 옮기고 싶을 때 rebase를 사용하여 branch의 HEAD를 옮길 수 있습니다. 

 

 

rebase를 하는 순서는

 

1. 위치를 변경하고자 하는 branch(dev)를 현재 branch (working branch) 로 만든다. 

2. 가고자 하는 커밋 위치가 있는 branch (ui) 의 commit 에 우클릭한다. 

3. rebase를 누른다. 

 

이렇게만 보면 사용할 일이 있을까 싶지만, 꽤 많이 사용되는 유용한 기능입니다 

예시를 보겠습니다. 

 

 

현재 상황은 dev branch에 dialog branch를 merge하고 난 후 입니다. 

만약 merge한 위치에서 dev가 아닌 dialog 브랜치에서 작업하고 싶다면 어떻게해야할까요?

 

재배치(rebase) 하면 됩니다. 

 

dialog branch를 dev branch로 재배치 하면, 

병합된 코드와 dialog branch에서 작업을 진행할 수 있습니다. 

 

 

8. Reset : 초기화

 

Reset은 지금까지 작업한 내용을 삭제하는 것을 말합니다. 

변경사항을 취소하고 다시 개발하고 싶거나 문제가 발생했을 때

git에서 reset을 하면 현재 코드의 변경사항이 모두 삭제됩니다.

 

 

 

9. Stash : (안전한 곳에) 넣어두다, 치우다

 

reset이 지금까지의 변경사항을 모두 지우는 일이라면, stash는 변경사항을 다른 곳에 저장해두는 기능입니다. 

개발 중에 merge를 해야하거나 rebase를 해야할 경우가 생길 수 있습니다 .

작업중인 코드를 reset 할 수는 없고, commit하기엔 구현이 되지 않았을 때 Stash에 코드를 저장할 수 있습니다 .

 

stash를 클릭하면 dialog가 나타납니다.

 

stash의 이름을 정하고 저장할 수 있습니다. 

stash를 진행하면, 현재 작업창에 있는 내용이 모두 지워지고 코드는 stash에 저장됩니다. 

 

Stash에 코드를 저장하면 해당 정보는 Working Directory 에 저장됩니다.

따라서, 디렉토리를 삭제할 경우 Stash도 삭제됩니다. 

서버에 업로드 된 데이터가 아니기 때문입니다. Stash 

영원히 삭제되니 유의하세요.

 

 

9. tag : 태그

 

tag는 특정 커밋에 tag를 달아 개발자가 해당 커밋에 대해 알기 쉽도록 해놓는 것입니다. 

예를들어 특정 커밋이 이번에 업데이트한 1.15 릴리즈 버전에 대한 내용이다 라고 하면, 

"Release-v1.15" 등으로 tag를 달 수 있습니다.

 

웬만한 명령어는 모두 배웠습니다.

다음 장에는 Sourcetree와 Git을 연동하는 방법을 알아봅시다.