만약 프로젝트에 새로운 기능을 추가하고자 한다. 동시에 기존의 프로젝트에서 발생하는 버그와같은 수정사항을 고쳐야 하는 상황이다. 그렇다면 다른 방향의 두 가지의 작업을 함께 진행 하여야하는데 만약 새로운 기능을 추가하는 작업이 취소되거나 수정되어 기능을 추가하기 전의 상태로 돌아가야하는 상황이 발생할 수 있다. 하지만 이 때 Git을 통해 이전의 상황으로 돌아갈 경우 동시에 작업하던 프로젝트의 수정 작업 역시 사라지고 이전 상태로 돌아가는 문제가 발생한다. 이때 Git의 branch 개념이 필요하다.


STEP01.

상단 메뉴의 Branch 버튼을 클릭한다.


STEP02.

새롭게 만들 Branch의 이름을 쓰고 Create Branch 버튼을 누른다.


STEP03.

다음과 같이 하나의 리포지토리에 두 개의 브랜치(master, AddNewMethod)가 생성되었다.

<AddNewMethod 브랜치>


<master 브랜치>


STEP04.

먼저 SourceTree에서 AddNewMethod 브랜치를 선택한 후 프로젝트의 코드를 수정하고 commit을 해본다.

<AddNewMethod 브랜치 선택 후 subXY 메소드 추가>


<AddNewMethod 브랜치에 새로운 버전(subXY) 생성>


STEP05.

다음으로 master 브랜치를 선택한 후 프로젝트의 코드를 수정하고 commit을 해본다. 여기서 master 브랜치를 선택할 경우 아래와 같이 AddNewMethod 브랜치에 commit한 수정사항이 사라진다.

<master 브랜치 선택 후 사라진 subXY 메소드>


<master 브랜치 선택 후 mulXY 메소드 추가>


<master 브랜치에 새로운 버전(mulXY) 생성>


STEP06.

아래와 같이 2개의 다른 브랜치에 각각의 버전이 생성되었다.

<master 브랜치>


<AddNewMethod 브랜치>


이렇게 새로운 branch를 생성하게 되고 프로젝트의 새로운 기능 추가는 새로운 branch에서, 기존 프로젝트의 버그 수정은 기존 master branch에서 작업해줌으로써 두 개의 작업이 동시에 수행가능하다. 이로인해 만약에 상황 발생 시, 두 작업이 서로 영향을 받지 않으면서 revert 나 reset 같은 이전상태로 되돌리는 작업이 가능하고 또한 지금까지 해왔던 작업을 취소할 수 있게 된다.

Posted by gangju
,

앞에서 배운 reset과 마찬가지로 이전의 버전으로 돌아가기 위해 revert를 사용할 수 있다.


STEP01.

취소할 버전을 선택하고 해당 버전에 마우스 오른쪽 클릭을 한다. 팝업이 뜨면 "Reverse commit"을 누른다.


STEP02.

Confirm reverse commit 팝업이 뜨면 Yes를 누른다.


STEP03.

다음과 같이 revert로 선택한 "Circle클래스 수정"을 취소하는 버전인 "Revert "Circle클래스 수정"이 commit 되었다. 소스코드 역시 "Circle클래스 수정" 버전을 실행하기 전인 "mainCode 수정 Circle 선언" 버전으로 돌아간다.


※ reset과 revert의 차이점

reset은 선택한 버전을 reset할 경우 선택한 버전의 이후 버전을 모두 삭제하고 선택한 버전의 상태로 되돌아간다.

revert는 선택한 버전을 revert할 경우 선택한 버전의 바로 전 버전으로 돌아가는 새로운 commit을 자동으로 실행한다.


※ 여러 버전을 건너뛰어 Revert하게 되면 충돌이 발생한다. 예를 들어, 위 예제에서 "Circle클래스 추가" 버전으로 돌아가고 싶을 경우 최근 버전인 "Circle클래스 수정" 버전부터 차례로 revert하여야 한다.

Posted by gangju
,

프로젝트가 진행되던 도중 문제가 발생하여 이전의 버전으로 돌아가야 하는 상황이 발생한다. 이때 돌아가길 원하는 버전으로 reset을 통해 되돌릴 수 있다.


STEP01.

되돌아갈 버전을 선택하고 마우스 오른쪽 버튼을 클릭하고 "Reset current branch  to this commit"을 누른다.


STEP02.

Reset to Commit 창이 아래와 같이 뜬다. 여기서 3가지의 mode가 존재하는데 Soft, Mixed 그리고 Hard는 다음을 의미한다. 원하는 mode를 선택 후 OK를 클릭한다.

1) Soft : index에 올라온 수정사항 보존, working tree에 올라온 수정사항 보존

2) Mixed : index에 올라온 수정사항 취소, working tree에 올라온 수정사항 보존

3) Hard : index에 올라온 수정사항 취소, working tree에 올라온 수정사항 보존


STEP3-1.

Hard mode를 선택할 경우, Reset한 버전이후의 버전이 모두 삭제되며 소스코드 역시 해당 버전의 소스코드로 수정되어있다.



STEP3-2.

Mixed mode를 선택할 경우, Reset한 버전이후의 버전이 모두 삭제되었으나 working tree의 소스코드는 유지되어 Uncommitted changes 항목이 표시되어있다. 또한 소스코드 역시 그대로 유지되어 있다.


Posted by gangju
,