git branch

정민교·2023년 6월 1일
0

git

목록 보기
5/22
post-thumbnail

✔️branch

깃에서 브랜치는 특정 커밋을 가리키는 포인터입니다.

git init 을 실행하여 현재 작업 공간을 git repo로 만들었다고 가정해봅시다.

master 브랜치가 생성되었고 세 개의 커밋을 진행한 상태를 생각해봅시다.

이 다음에 새로운 testing이라는 새로운 깃 브랜치를 생성합니다.

그럼 위 그림과 같은 상태가 됩니다.

✔️HEAD

HEAD는 현재 작업중인 브랜치를 가르킵니다.

깃에서 브랜치 포인터들은 서로 다른 커밋을 가리키고 있고 HEAD를 움직여서 현재 작업중인 브랜치에서 다른 브랜치로 이동할 수 있습니다.

위에서 브랜치를 testing 브랜치를 생성하면 HEAD가 testing 브랜치를 가리키게 됩니다.

git branch 는 새로운 브랜치만 생성하고

git checkout 은 새로운 브랜치를 생성한 후 해당 브랜치로 이동합니다.

위 그림은 현재 작업 중인 브랜치가 testing 브랜치입니다.

이 상태에서 새로운 커밋을 만들었다고 가정해봅시다.

그럼 아래 그림처럼 testing 브랜치가 새로운 커밋을 가리키고 HEAD 또한 testing 브랜치를 가리키지만 master 브랜치는 여전히 이전 커밋을 가리키고 있습니다.

이 상태해서 git checkout 을 실행하여 master 브랜치로 이동한다면 다음 그림과 같게 됩니다.


HEAD는 master 브랜치가 가리키는 커밋을 가리키게 되고, working directory의 파일도 이 커밋 시점으로 돌아가게 됩니다.

이 상태(master 브랜치에 있는 상태) 새로운 변경사항을 만들고 commit을 하게 되면 다음과 같이 됩니다.


이렇게 되면 master 브랜치는 새로운 커밋을 가리키고 되고 HEAD 또한 마찬가지입니다.

이렇게 프로젝트 히스토리가 분리되고 두 작업 내용은 서로 독립적으로 각 브랜치에 존재하게 됩니다.

따라서 깃 브랜치를 어디서 생성했는지(어디서 분기하느냐)는 매우 중요합니다.

git에서 👉Head와 브랜치를 저장하는 방법

.git 디렉토리 안에 HEAD 파일을 확인하면

ref: refs/heads/chicken (chicken은 브랜치 이름이고 예시를 든 것입니다.)

위처럼 chicken 브랜치를 참조한다는 것을 확인할 수 있고

위 경로로 이동하여 chicken 파일을 확인하면, chicken 브랜치가 가리키는 커밋의 커밋 해시가 내용으로 들어있는 걸 확인할 수 있습니다.

✔️명령어

📌 브랜치 확인

git branch

현재 깃 레포에 존재하는 브랜치들을 확인할 수 있습니다.

📌 브랜치 생성

git branch <branch-name>

새로운 브랜치를 생성합니다. 현재 HEAD가 가리키는 커밋을 기준으로 생성됩니다.

새로운 브랜치를 생성하지만 그 브랜치로 이동하지는 않습니다.

git checkout <branch-name>

checkout으로 브랜치를 생성할 수도 있습니다. 이는 생성과 함께 브랜치를 이동합니다.

checkout 명령어는 브랜치 생성 말고도 여러 일을 많이 하기 때문에(working tree 파일 복원 등)

저는 브랜치 branch 를 이용한 브랜치 생성과 switch 를 이용한 브랜치 이동을 주로 사용합니다.

📌브랜치 이동

git switch <branch-name>

브랜치 이름에 해당하는 브랜치로 이동합니다.

HEAD도 해당 브랜치를 가리키게 됩니다.

-c 옵션을 주어서 브랜치를 생성하고 이동하는 걸 같이 할 수도 있습니다.

👉브랜치 이동 에러

브랜치를 이동할 때 현재 작업중인 브랜치에서 만든 변경사항과, 이동하려고 하는 브랜치에서 만든 변경사항이 충돌하는 경우 브랜치를 이동할 수 없습니다.

stash를 하거나 commit하거나, restore를 실행해 모든 변경사항을 없애버리고 이동할 수 있습니다.

변경사항이 충돌하지 않는다면 오류없이 이동할 수 있습니다.

📌브랜치 삭제

git branch -d or --delete <branch-name>

해당 브랜치 이름의 브랜치를 삭제합니다.

현재 작업중인 브랜치가 삭제할 브랜치인 경우에는 삭제하지 못하고 다른 브랜치로 이동하여 삭제해야 합니다.

👉브랜치 삭제 오류

완전히 병합된 브랜치여야 삭제가 가능합니다. 병합되지 않은 브랜치라면 삭제할 수 없습니다.

병합 여부와 상관없이 브랜치를 삭제하려면 -f or --force 옵션을 추가하거나

-D 옵션으로 브랜치를 삭제할 수 있습니다

-D 옵션은 --delete --force 의 shorthand 입니다.

📌브랜치 이름 변경

git branch -m or --move <새로운 branch-name>

브랜치를 삭제할 때는 내가 현재 삭제하려는 브랜치에 있는 경우 삭제가 불가능했지만

브랜치 이름을 바꾸려고 하는 경우 바꾸려는 브랜치로 이동한 후 이름 변경이 가능합니다.


🙏🙏🙏
git 시리즈에 작성한 포스팅은

https://www.udemy.com/course/best-git-github/
유데미 강좌
https://www.yes24.com/Product/Goods/110795446
모두의 깃 & 깃허브

위 내용을 참고하였으며, 제 실습화면을 캡쳐한 사진 외의

대부분의 사진들은 인터넷 강좌에서 제공하는 자료를 캡쳐하였습니다.

깃 시리즈 포스팅의 내용 및 사진을 절대로 상업적 목적으로 무단 복사하지 말아주세요.

또한 작성한 포스팅은 문제가 발생할 시 전부 삭제할 예정입니다.


profile
백엔드 개발자

0개의 댓글