[Git - ④] git reset, revert + SourceTree 사용
[Git - ④] git reset, revert + SourceTree 사용
[Git - ③] git commit [Git - ③] git commit [Git - ②] Git 설정 + 프로젝트 시작 + .gitignore [Git - ②] Git 설정 + 프로젝트 시작 + .gitignore [Git - ①] Git? + Window 세팅 (Git Bash, Source Tree) + CLI, GUI ? [Git - ①] Git? + Windo
soohykeee.tistory.com
Branch
branch는 가지라는 뜻을 가진 분기된 가지라는 것이다. 다음과 같은 상황에서 브랜치를 사용한다.
- 프로젝트를 하나 이상의 모습으로 관리해야 할 때 (배포 서버용, 테스트 서버용, 새기능용 등..)
- 여러 작업들이 각각 독립되어 진행될 때 (기능1, 기능2, 버그수정, 긴급수정 등..)
즉, 각 브랜치를 기능별로 구분해놓고 각 브랜치에서 기능별로 개발을 해주는 것이다. 그러다 개발이 완료된 브랜치별로 main 브랜치에 push 해주는 것이다.
branch 생성
현재 해당 프로젝트에서 coach를 추가해주는 기능을 개발한다고 가정해보자. 그렇다면 branch로 add-coach를 생성해준 후, 해당 브랜치에서 개발을 해야한다.
생성 : git branch add-coach
조회 : git branch
이동 : git switch add-coach
위에서 부터 순서대로, add-coach 브랜치 생성, 조회, 그리고 이동까지 되는 것을 확인할 수 있다.
기존에는 switch로 브랜치 이동이 아니라 checkout을 통해 이동했지만, 현재는 checkout, switch, restore로 분리되서 사용된다.
branch 생성과 동시에 이동
git switch -c new-teams -> new-teams 라는 브랜치가 생성이 되고, 해당 브랜치로 이동도 한다.
branch 이름 수정 및 삭제
git branch -m (기존 브랜치명) (새 브랜치명) -> 이렇게 작성해주면 branch 명이 변경된다.
git branch -d (삭제할 브랜치명) -> 이렇게 작성해주면 branch가 삭제된다.
* git branch -D (삭제할 브랜치명) -> 이렇게 대문자로 작성하면 강제 삭제하게 된다.
각 브랜치마다 커밋해주기
이번에는 각 브랜치마다 실습을 통해 커밋을 해줄 것이다.
- main 브랜치
- lepards의 members에 Olivia 추가 / 커밋 메시지 : Add Olivia to Leopards
- panthers의 members에 Freddie 추가 / 커밋 메시지 : Add Freddie to Panthers
- add-coach 브랜치
- tigers의 매니저 정보 아래 coach: Grace 추가 / 커밋 메시지 : Add Coach Grace to Tigers
- leopards의 매니저 정보 아래 coach: Oscar 추가 / 커밋 메시지 : Add Coach Oscar to Leopards
- panthers의 매니저 정보 아래 coach: Teddy추가 / 커밋 메시지 : Add Coach Teddyto Panthers
- new-teams 브랜치
- pumas.yaml 추가 / 커밋 메시지 : Add team Pumas
- jaguars.yaml 추가 / 커밋 메시지 : Add team Jaguars
위의 실습을 해준 후, SourceTree를 확인해보면 아래와 같이 branch가 생성되고, 거기서 작업이 이루어진 것을 확인할 수 있다.
git log --all --decorate --oneline --graph -> 이렇게 작성하면 터미널에서도 확인이 가능하다.
merge, rebase
앞서 여러 branch가 생성된 것을 볼 수 있다. 이제 해당 branch들을 main에 합치는 방법을 알아볼 것이다.
우선 서로 다른 브랜치를 합치는 방식은 2가지가 존재한다.
- merge : 두 브랜치를 한 커밋에 이어붙인다.
- 브랜치 사용 내역을 남길 필요가 있을 때 적합한 방식이다.
- rebase : 브랜치를 다른 브랜치에 이어붙입니다.
- 한줄로 깔끔히 정리된 내역을 유지하기 원할 때 적합하다.
- 만일 협업을 한다면, 팀원과 공유된 커밋들에 대해서는 rebase하지 않는 것이 좋다.
실습
merge
add-coach의 브랜치를 main 브랜치로 merge 해줄 것이다. merge는 합쳐줄 브랜치로 이동해서 작업해줘야한다.
1. main 브랜치로 이동
2. git merge add-coach 로 병합
아래에서 확인해보면 add-coach가 main으로 merge 된 것을 확인할 수 있다.
즉, 현재 main에서는 add-coach에서 했던 작업이 모두 반영이 된것이다. 그렇기에 이제 더이상 add-coach 브랜치는 사용하지 않고, 더 이상 가져올 정보도 없기에 삭제해줘도 된다.
만약, merge를 reset하게 되면 어떻게 될까?
merge는 하나의 새로운 commit이기에 해당 commit을 reset 하게 되면 그 전 상태로 돌아간다.
확인 했으니 다시 merge 해준다.
또한 앞서 말한것처럼 더이상 add-coach는 사용하지 않기에 delete 해주면 된다.
git branch -d add-coach
rebase
new-teams의 브랜치를 main으로 rebase 해줄 것이다. 여기서는 merge 때와는 반대로 합쳐주는 브랜치로 이동해서 rebase 해줘야 한다.
1. new-teams 브랜치로 이동
2. git rebase main 로 병합
new-teams가 main에 rebase가 되어서 한줄로 된 것을 확인할 수 있다. 아래의 branch들을 보게되면 main과 new-teams가 현재 있는 위치가 다르다. 그렇기에 만약 git switch main 해주게 되면, new-teams에서 수행했던 작업들이 반영이 되지 않은 것을 확인할 수 있다.
위에서 말한 main에 합쳐지긴 했지만 반영이 되지 않았기에 이를 해결해주기 위해서는
git merge new-teams 를 해줘야 한다.
merge는 합쳐질 브랜치에서 작성해줘야 하므로, git switch main 해준 후, merge 해준다.
SourceTree를 확인해보면, main에 new-teams의 변경사항이 반영된 것을 확인할 수 있다.
new-teams 브랜치도 마찬가지로 main에 모든 변경사항이 반영이 되었으므로 new-teams 브랜치를 삭제해주면 된다.