Git Checkout and Branch

dpwl·2024년 4월 19일
0

Data Analysis

목록 보기
35/83

1. Git Checkout

Git checkout특정 버전으로 이동하는걸 뜻한다.

git checkout <commit_id>

이 명령은 작업 디렉토리를 지정된 commit이나 branch의 상태로 작업 폴더가 변경이 된다. 해당 시점의 코드 및 상태를 확인하거나 작업을 시작할 수 있다.

1.1 Commit ID (HashCode)

각 commit은 고유한 HashCode로 식별된다. 이 해시 코드는 해당 commit의 고유한 식별자 역할을 한다.

보통은 전체 해시 코드 중 일부(예: 처음 7자)만 사용하여 commit을 구분한다. 이것을 통해 특정 commit을 식별하고 해당 시점으로 이동할 수 있다. git log --oneline 명령을 사용하면 각 commit에 대한 짧은 해시 코드를 확인할 수 있다.

1.2 Git Checkout하면 벌어지는 일

  • git checkout을 실행하면 현재 작업 중인 Working Deirectory가 해당 버전의 상태로 변경

  • 작업 중인 위치를 나타내는 것을 HEAD라고 한다.

  • HEAD가 현재 작업 중인 branch나 commit을 가리키며, 현재 작업 중인 상태를 나타낸다.

  • 로그를 확인하면 첫 번째 commit ID가 (HEAD -> main)인 것을 확인할 수 있다. 이 의미는 해당 commit이 main branch가 가르키고 있는 버전이고 HEAD가 여기에 위치한다는 것은 현재 작업 중인 branch가 main branch이며, 해당 commit에서 작업을 진행 중이라는 의미이다.

  • 만약 C1인 특정 commit ID를 지정하여 checkout을 실행하면 HEAD가 해당 commit을 가리키게 된다.

2. Git Branch

프로젝트 개발을 하다보면 코드를 여러개로 복사해서 작업하는 경우가 많이 생긴다.

  • 원래 코드와는 상관 없이 독립적으로 작업해야할 필요가 있는 경우가 있다.
  • 이후에는 작업한 내용을 원래 코드와 병합할 필요가 있다.

Git Branch는 원래 코드를 복사하여 독립적으로 작업할때 사용한다.

  • 특정 버전에서 새로운 branch를 만들어서 작업하다가 병합(merge)할 수 있다.
  • Repository를 생성하면 main branch가 기본으로 만들어진다.

참고: Remote + Local Branch 예시

2.1 Git Branch 목록 보기 - Local

Local repository에서 생성한 branch 목록을 보여준다.

git branch

2.2 Git Branch 목록 보기 - Remote

Branch는 local과 remote가 별도로 관리를 한다. 따라서 local에만 만들어 놓고 쓸수가 있고, 내가 만들어서 쓰던 branch를 remote에 공유해줄수도 있다. 그래서 local의 branch 상태와 remote의 branch 상태가 달라질 수 있다.

git branch -r

2.3 Git Branch 목록 보기 - All

Local과 remote branch 모두 보고싶으면 -a을 쓰면 된다.

git branch -a

local값과 remote값이 구분되어 보여진다.

2.4 Git Branch 생성 - Local

기본적으로 branch 생성은 local repository에 생성이 된다. 중요한 점은 현재 있는 시점에서 branch를 낸다.

git branch <branch_name>

2.5 Git Branch 배포 - Remote

Local에서 만든 건데 remote repository에 공유를 하려면 branch를 따로 서버에 배포해주면 된다.

git push origin <branch_name>

2.6 Git Branch 삭제 - Local

잘못 만들거나 삭제가 필요한 경우 다음과 같은 명령어를 쓰면되지만 remote에 배포를 했더라고 local꺼만 지워진다. Local에서 관리하는 것과 remote에서 관리하는게 다르기 때문이다.

git branch --delete <branch_name>

2.7 Git Branch 삭제 - Remote

Remote에서도 지워줘야 local과 remote branch 둘다 지워진다.

git push origin --delete <branch_name>

2.8 Git Branch 간 이동

git checkout <branch_name>

3. Default Branch 구경

3.1 Remote Repository 생성

1) GitHub 로그인
2) New repository 버튼 클릭
3) Repository name 입력
4) Private 선택
5) Add a README file 선택
6) Create repository 버튼 클릭
6) HTTPS 주소 복사

여기서 참고로 repository 기본 branch를 main에서 다른걸로 변경하고 싶으면 다음과 같은 프로세스를 따라하면 된다.

1) GitHub에서 user 아이콘 클릭
2) Settings 클릭
3) 왼쪽 메뉴에서 Repository 클릭
4) Repository default branch 변경

3.2 Local Repository로 Clone

1) Terminal 실행
2) Query 입력

remote_project % cd ..
git_ws % git clone https://github.com/yeji4175/branch_project.git

git_ws % cd branch_project
branch_project % git status

On branch main의 뜻은 메인 branch 하나가 있는데 HEAD가 main을 가르키고 있다라는 뜻이다.

Remote에는 origin/main이 있다.

README.md 파일이 remote의 메인과 local의 메인이 가르키고 있는 상태이다.

3.3 Local Branch 정보 확인

branch_project % ls

branch_project % git branch #Local branch 목록 보여주기

* main이라는 local branch 목록을 보여주고 있는데 기본값으로 main이 하나가 있고, *는 현재 여기를 HEAD가 가르키고 있으며 메인 branch 상에 머무르고 있다라고 보여주고 있는거다.

3.4 Remote Branch 정보 확인

branch_project % git branch -r

branch_project % git branch -a #전체보기

전체보기를 하면 local branch인 * main이 보이며, remote branch 정보는 remotes/로 보이며 local과 remote를 쉽게 구분할 수 있게 정보를 확인할 수 있다.

3.5 Git Log

위의 정보들을 git log를 통해서도 확인할 수 있다.

branch_project % git log

git log를 입력하면 commit에서 local의 HEAD가 main을 가리키고 있고, remote의 main 및 HEAD도 해당 commit을 가리키고 있다라는 걸 알 수 있다.

4. Git Branch 사용

4.1 파일 생성 후 Commit

branch_project % touch file1.py #빈 파일 만들기
branch_project % git add file1.py
branch_project % git commit -m "add file1"

branch_project % ls #현재 버전 상태 확인

만약 아래와 같이 빈 파일을 add, file1.py로 잘못 생성하면add라는 파일은 unstaged 상태이기에 바로 지워줄 수 있다.

4.2 파일 더 생성 후 Commit

branch_project % touch file2.py
branch_project % git add file2.py
branch_project % git commit -m "add file2"

branch_project % git log

4.3 Branch 생성

branch_project % ls
branch_project % git branch dev #local에 dev branch 생성
branch_project % git branch

4.4 Log 구경

branch_project % git log --oneline

4.5 dev Branch로 이동

branch_project % git checkout dev

branch_project % git branch 

git checkout dev 명령을 하는 순간 main을 가리키던 HEAD는 dev를 가리키게 된다.

git branch 명령을 쓰면 *가 dev 앞에 붙어있는 걸 확인할 수 있다.

4.6 dev Branch에서 파일 생성 후 Commit

branch_project % touch file3.py
branch_project % git add file3.py
branch_project % git commit -m "add file3"

branch_project % ls

4.7 Main Branch로 이동

branch_project % git checkout main

branch_project % ls

4.6에서 file3.py를 추가했지만 main branch로 이동했기에 file3.py이 보이지 않는다.

4.8 Main Branch에서 파일 수정

branch_project % git branch
branch_project % cat > file1.py
print("Hello, Branch.") #ctrl+D
branch_project % cat file1.py
branch_project % git commit -a -m "modify file1"

branch_project % git status

4.9 Main Branch Log 확인

branch_project % git log --oneline

4.10 dev Branch Log 확인

branch_project % git checkout dev 

branch_project % git log --oneline

4.11 현재 전체 Branch 목록 확인

branch_project % git branch -a

4.12 dev Branch Remote로 배포

branch_project % git push origin dev

4.13 현재 전체 Branch 목록 다시 확인

branch_project % git branch -a

dev branch를 remote로 배포한 이후로 remote에도 dev가 잘 배포된걸 확인할 수 있다.

GitHub를 새로고침하면 branch_project에서 dev가 잘 배포된걸 확인할 수 있다.

dev를 클릭하면 아래 이미지와 같이 local repository 상태가 반영이 된걸 확인할 수 있다.

main도 똑같이 remote repository에 배포를 하면 다음과 같이 query를 입력하면 된다.

branch_project % git push origin main

main branch가 remote repository에 잘 배포되었는지 확인을 하고 싶으면 GitHub의 branch_project를 새로고침하면 된다. 그럼 local repository 상태가 반영이 된걸 확인할 수 있다.

5. Branch를 만들고 지우기

5.1 dev2 Branch 생성

branch_project % git checkout -b dev2
#-b 옵션을 사용하여 간단하게 dev branch를 만들고 해당 dev branch로 이동
branch_project % git branch

5.2 dev2 Branch Remote로 배포

branch_project % git push origin dev2

branch_project % git branch -a

GitHub를 새로고침하면 remote에도 dev2 branch가 잘 배포되어 있는걸 확인할 수 있다.

5.3 Local에서 dev2 Branch 삭제 - Error

branch_project % git branch --delete dev2

하지만 위의 이미지와 같이 에러가 뜬다. 이 에러는 dev2 branch에서 dev2를 삭제가 안되니 다른 branch로 이동 후 삭제하라는 뜻이다.

5.4 Local에서 dev2 Branch 삭제 - Error 2

branch_project % git checkout main

branch_project % git branch --delete dev2

여기 이미지 필요

main branch로 이동을 한 후 다시 dev2 branch를 삭제하려고 해도 다음과 같은 에러가 뜬다. 이 의미는 아직 제대로 병합되지 않았다고 한다. 왜냐하면 dev2 branch는 비어있는 상태로 최초의 상태에서는 --delete로 삭제가 불가능하며 -D로 삭제가 가능하다.

내가 위의 방법을 따라했을 때는 에러가 안나고 잘 지워졌다.

5.5 Local에서 dev2 Branch 삭제

branch_project % git branch -D dev2

branch_project % git status

5.6 Remote에서 dev2 Branch 삭제

branch_project % git push origin --delete dev2

branch_project % git branch -a

GitHub에서 branch_project를 다시 새로고침하면 remote repository에도 dev2 삭제가 반영되어있는걸 확인할 수 있다.

profile
거북선통통통통

0개의 댓글