Git

[Git] branch 생성, 전환, 삭제 (branch, checkout & switch & restore)

neck392 2024. 11. 3. 10:14

 branch는 분리된 작업 공간을 말한다. 해당 명령어로 현재 작업 공간의 데이터를 기반으로 분기하여 새롭고 분리된 작업 공간을 생성할 수 있다. branch를 나누어 작업하면 conflict를 해소하는데 도움이 된다. 사용자들 마다 각각의 branch에서 작업하고 main branch로 merge하는 방식이 일반적이다.

 

작업자 간의 작업 효율성을 위해서는 branch를 목적에 맞게 생성 및 분리하여 작업하고, 목적 달성 시 바로 main branch에 merge하는 것이 좋다. 또한, 작업 branch와 배포할 목적을 가진 branch를 나누어 관리할 수도 있다.

<branch 작업 흐름 예시>

branch

branch는 코드의 특점 시점을 기준으로 분기하여 독립적으로 각각의 commit 내용을 기록한다. merge 전까지는 다른 branch와 충돌할 염려가 없다. 새로운 repository를 생성하고 작업하는 공간도 하나의 branch이며 보통 main이라는 이름을 가진다.

// branch 목록 확인
git branch

// local과 remote를 포함하여 branch 목록 확인
git branch -a

 위의 명령어를 통하여 repository의 현재 branch 목록을 확인할 수 있다.

<git branch 명령어 입력 예시>

위 입력 예시에서는 3개의 branch가 존재하며 현재 작업 공간은 main이다.

// branch 생성
git branch <생성할 branch 이름>

// branch 이름 변경
git branch -m <새로운 branch 이름>

// branch 삭제 (merge된 상태에서만 삭제 가능, merge하기 전이면 오류메세지 출력)
git branch -d <branch 이름>

// 강제 삭제 (merge 전이어도 강제 삭제)
git branch -D <branch 이름>

// remote에서의 branch 삭제
git push <저장소 이름> --delete <branch 이름>
//ex(origin에서 main branch 삭제)
git push origin --delete main

git branch <생성할 branch 이름> 명령어는 현재 작업 공간의 데이터를 기반으로 branch를 생성만 할 뿐 작업 공간을 전환해주지는 않는다. 작업 공간을 전환하기 위해서는 아래의 checkout 명령어를 활용해야 한다.

 

checkout

checkout 명령어는 branch를 전환하거나 특정 commit 시점으로 복구할 때 사용되며 checkout 명령어의 옵션을 통하여 branch를 생성하고 바로 해당 branch로 작업 공간을 전환할 수 있다.

// branch 전환
git checkout <전환할 branch 이름>
git switch <전환할 branch 이름>

// branch 생성 및 전환
git checkout -b <새로운 branch 이름>
git switch -c <새로운 branch 이름>

// 특정 파일을 이전 상태로 복구
git checkout <commit 해시값> -- <파일 이름>
git restore --source=<commit 해시값> <파일 이름>
// 특정 파일을 마지막 commit 상태로 복구
git checkout HEAD -- <파일 이름>
git restore <파일 이름>
// 특정 파일을 한 commit 전으로 복구
git checkout HEAD~1 -- <파일 이름>

// working directory를 특정 commit 상태로 전환
git checkout <commit 해시값>

commit 마다 고유한 해시 값을 가지며 이는 commit ID라고도 부른다. 이를 활용하여 특점 시점으로 이동 가능하다.

"git checkout <commit 해시값(ID)>"는 과거의 commit에 대한 데이터 상태를 확인할 때 자주 사용한다.