깃허브 github

[Git] 뉴비를 위한 Github 브랜치(branch) 가이드 (CLI ver)

sseozytank 2024. 5. 30.
 

[Git] 뉴비를 위한 Github 사용법 총정리 (CLI ver)

데이터 분석가지만, 서비스에 들어가는 알고리즘이나 로직개발을 하며 협업을 위해 Git사용이 꼭 필요해졌고 같은 초심자의 입장에서 Git을 사용하며 어려웠던 부분을 공유하면 좋을 것 같아 팀

sseozytank.tistory.com

 

위 글에서 마지막 맺음 말로 브랜치를 다뤄보겠다고 사라진지 언 1년 반.... 댓글을 보고 다시 생각나 부랴부랴 작성하게 되었다. 이직 이후 개발적인 업무는 하고있지않아 깃허브를 따로 사용하진 않았기 때문에 글이 올라오지 않았었다. 그래서 이번엔 전 직장 동료분이신 프론트엔드 개발자 C님을 괴롭혀서 글을 작성해 왔다! 

 

깃허브를 쓴다면 반드시 알아야하는 브랜치 가이드 시작 

이번 글도 흐름을 하나하나 이해하게 하기 위해 글이 좀 길다. 옆에 따라다니는 목차를 잘 활용하도록 합시다!

 

1.브랜치, 너는 뭐고 왜 쓰는거야?

우리가 앱 개발을 한다 치자. 앱의 클라이언트를 모두 담은 코드가 있고, 나는 이 앱의 로그인 부분만 작업하고 다른 사람은 결제 부분을 작업해야 하는 상황이다. 이 작업을 하기 위해선 

 

(1) 일단 앱 전체의 코드는 절대 건드리면 안된다.

(2) 근데 시간도 없으니 내 작업 따로, 다른 사람 작업은 따로 이루어져야 한다. 

 

그럼 각자 VsCode에서 작업해서 그냥 합치면 안돼? 가 된다. 각자 VsCode에서 작업해서 메인 코드를 수정해 버리면 아래와 같은 문제점이 발생한다.

 

(1) 만약 수정이 잘못된거면 이전 메인 코드는 어떻게 복구시키지..? 

(2) 근데 너는 어떤 부분을 바꾼거야? 이미 다 바꿔놓으니까 모르겠어 어디를 바꿔둔지

 

이러한 문제점을 해결하기 위해 등장한 것이 Branch 시스템이다. 

즉, 브랜치란 Git에서 소스코드를 분리하여 관리하는 개념이다. 그림으로 살펴보면 이런느낌이다. 마스터 가지가 있으면 마스터에서 개발할 곳을 땡겨와서 내가 수정하고 수정한 것을 다시 마스터에 반영하는 것! 이렇게 되면 메인 브랜치의 소스 코드들은 안전하게 보관할 수 있고, develop인 나의 브랜치는 작업 히스토리를 계속 남기면서 안정성 확인이 완료된 후에 마스터 브랜치에 커밋해서 합칠 수 있게 되는 것이다. 

 

요약하자면 브랜치란

(1) Git에서 코드를 분기하여 관리하는 개념

(2) 동시에 다른 작업을 할 수 있게 해준다. 

(3) 분리된 작업 영역에서 변경된 내용은 나중에 원래의 버전과 비교해서 하나의 새로운 버전으로 만들어 낼 수 있음

(4) 또한 각 변경 사항에 대한 히스토리를 남길 수 있게 해주어 버전 관리 또한 유용하게 할 수 있는 아주 좋은 기능이다.

https://geniusee.com/single-blog/everything-you-need-to-know-about-git-flow-branch-model

 

2.그럼 어떻게 사용하는건데요? 

하지만 백문이 불여일견! 직접 사용해보도록 하자. 우선 로컬 git에서의 사용법을 알고, github와 연결해보도록 할 것이다. 

 

2-1. GIT 

일단, 리눅스 환경에서 깃을 테스트할 폴더와 파일을 올려주자.  나는 virtual box에서 명령어를 치기 때문에 아래와 같이 만들어주었고,

mkdir test_git
cd test_git
touch git_test.py
vim git_test.py

def add(x, y):
    """두 숫자의 합을 계산합니다."""
    return x + y

def subtract(x, y):
    """두 숫자의 차를 계산합니다."""
    return x - y

def multiply(x, y):
    """두 숫자의 곱을 계산합니다."""
    return x * y

def divide(x, y):
    """두 숫자의 나눗셈을 계산합니다. (0으로 나누는 경우는 처리하지 않습니다.)"""
    if y == 0:
        return "Error: Division by zero!"
    return x / y

# 사용자로부터 숫자를 입력받습니다.
num1 = float(input("첫 번째 숫자를 입력하세요: "))
num2 = float(input("두 번째 숫자를 입력하세요: "))

# 각각의 연산을 수행하고 결과를 출력합니다.
print("더하기 결과:", add(num1, num2))
print("빼기 결과:", subtract(num1, num2))
print("곱하기 결과:", multiply(num1, num2))
print("나누기 결과:", divide(num1, num2))

 

 

로컬을 사용하는 사람들은 아래 파일을 활용 하면 된다! 

git_test.py
0.00MB

 

 

vim은 어떻게 쓰는거죠!!!!

 

[Linux] 뉴비를 위한 VIM 기초 사용법 총정리

1.vim과 nano - 유닉스에서 사용할 수 있는 에디터로, 터미널을 통해서 텍스트 편집이 가능한 텍스트 편집기 2.vi와 vim - vi : visual display editor - vim : vi iMproved , 향상된 vi (업그레이드 버전) 3.vim 사용법

sseozytank.tistory.com

 

 

0.test_git 폴더를 git 저장소로 설정하기

git add .

.은 현재 경로라는 뜻으로 내가 혹시 test_git 경로가 아니라면 본인 경로에 맞게 수정해주어야 함 

git add .

 

*깃 계정 설정 

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

 

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

 

커밋 해주기 

git commit -m "Initial commit"

 

 

자 이제 초기 세팅이 끝났다. 이제 부터 우리가 해볼 것은 

로컬 git에서 branch를 생성하고 타 브랜치에서 작업한 걸 main 브랜치에 merge 하는 것과, 원격 저장소인 github와의 연동까지 해볼 것이당.

 

1.branch 생성하기 

우선 현재 브랜치 상태를 보면

git branch

 

master 브랜치만 존재하는 것을 확인할 수 있다. *이 붙어있는 브랜치는 현재 활성화된 브랜치이고 

master 브랜치는 최초 레포지토리 생성 후 커밋하면 자동으로 생기는 브랜치임! 

 

우린 이제 main 이라는 브랜치와 work 라는 브랜치를 만들어 줄 것이다. main은 최종본이 저장된 곳, work는 내가 작업하는 공간이라고 해보자.  

git branch main
git branch work
git branch

 

이렇게 branch가 생성된 것을 확인할 수 있다. 

 

*branch를 삭제하고 싶어요 

git branch -D [브랜치명]

 

*branch명을 바꾸고 싶어요 

git branch -m [현재브랜치명] [새로운브랜치명]

 

2.branch 변경하기 

내가 지금 무엇을 하게 되면, master라는 브랜치에서 작업하게 되는 것이다. 하지만 우리는 work 브랜치에서 작업해야함 ! 

그러므로 작업 브랜치를 해당 명령어로 변경해주도록 하자. 

git checkout work

 

work 디렉토리로 잘 변경 된 것을 확인할 수 있다. 

 

3.work 브랜치에서 코드 한줄을 삭제하고, commit 해보자

.py 여기 마지막줄을 삭제해줄 것이이다. 

vim git_test.py

 

 

저장 후 커밋 

git add git_test.py
git commit -m "delete_divide"

 

4.main 브랜치에서 git_test.py 파일을 확인해보자. 

우리는 지금까지 work 브랜치에서 git_test.py의 코드 한줄을 삭제했었다. 그럼 main 브랜치에서 git_test.py는 어떻게 남아있을까 ? 

git checkout main
cat git_test.py

 

work 브랜치에선 삭제했었는데, 당연히 main 브랜치의 git_test.py는 변경되지 않았다!!! 이제 branch 개념이 완벽하게 이해가 될 것이다. 

5.main 브랜치에 work 브랜치를 merge 해보자. 

하지만, 브랜치에 꽃은, 역시 work 에서 작업한것을 main에 합치는 것! 작업한 내용을 main 브랜치로 병합해보자.

 

1.우선  main 브랜치로 전환해준다. 

git checkout main

 

2.이후, merge 실행 

git merge work

 

이렇게 보면 git_test.py에 한줄이 삭제된 것이 머지됐다는 것을 확인 가능 . 

그럼 다시 main 브랜치의 py 파일을 확인해보면 

cat git_test.py

 

work 브랜치에서 삭제했던 마지막 줄이 main 브랜치에서도 삭제되었음을 확인할 수 있다 !! 

 

*병합을 취소하고 싶어요.. 

https://mylko72.gitbooks.io/git/content/branch/merge_cancel.html

 

 

 

자 이렇게, 로컬 git에서의 branch에 대한 이해와 실습이 끝났다. 그렇다면 원격 remote 저장소인 git hub와 연결해보자!

2-2. LOCAL -> GIT HUB

저번 게시글에선 GIT HUB 레포 생성을 웹으로 했었기 때문에 이번엔 CLI로 해보겠다. 저번 게시글을 참고해서 웹으로 해도 무방 >_<  

0.깃허브 CLI 설치 

#linux
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0
sudo apt-add-repository https://cli.github.com/packages
sudo apt update
sudo apt install gh

#mac 
brew install gh

#window 링크에서 직접 다운
https://git-scm.com/download/win

 

 

 

1.깃허브 로그인

gh auth login

엔터 엔터 엔터 엔터 해주고 

마지막에 OOOO-OOOO이 뜬다. 이걸 복사해두기 ! 복사해두고 엔터를 누르면 원래는 창이 떠야하는데 나는 에러가 떴고... 

 

이럴 경우에는 그냥 이 링크로 접속 하기 

https://github.com/login/device

 

이 화면에다가 아까 복사해둔 8자리 코드를 붙혀넣어 준다. 

Authorized 머시기 눌러주면 추카포카롱! 

 

 

리눅스에서도 엔터를 눌러주니 로그인 된 것을 확인할 수 있다! 

 

2.새로운 깃허브 레포 만들기 

#gh repo create [레포지토리명] --description [설명] --[public/private]
gh repo create branch-test --description "branch-test" --public

 

나는 branch-test 라는 이름의 공개 레포지토리를 만들어주었다. 

2024년 6월 11일에 레포지토리가 생성되었다 !!!! 

 

3.레포지토리에 브랜치를 올려보자 

그럼 이제 생성한 깃허브 레포지토리에 우리가 작업한 브랜치를 올려보자 .

 

1.깃 레포지토리 연결하기 

#git remote add [연결명] [깃레포주소(ex.https://github.com/user/repository)]
git remote add test https://github.com/sseozy/branch-test

 

git remote -v

 

2.깃 레포지토리에 로컬 브랜치 push 

#git push [원격저장소명] [브랜치]
git push test main

 

 

 

짜잔! main 브랜치에 git_test.py가 올라갔다. 

 

그럼 여기서 work 브랜치도 추가해볼까? 

 

브랜치가 두개가 된 것을 확인할 수 있다.

 

*한번에 모든 branch를 올리고 싶어용 

#git push -u [저장소명] --all
git push -u origin --all

 

하나하나 따라해보니 브랜치에 대해 이해가 되고 어떻게 사용했는지 감이 오지 않는...가..!!!!!? 와야한다! 와야해!!!!! 

 

자자자 그럼 이제 깃허브에있는 브랜치를 내 로컬로 땡겨오는 법도 해야겠죠 !!!? 

2-3. GITHUB -> LOCAL

1.원격 저장소의 브랜치를 내 로컬로 땡겨오기 

1.원격 저장소의 어떤 브랜치가 있는지 확인 

#git ls-remote [remote_repostiroy_url]
git ls-remote test 
#또는
git ls-remote http://github.com/sseozy/branch-test

 

 

2.원하는 브랜치 땡겨오기 

나는 work 브랜치만 땡겨오겠다. 

#git fetch <remote_name> <원격저장소브랜치명>:<로컬로가져올브랜치명>
git fetch test work:work1

 

git branch

 

원격 저장소의 work 브랜치를 work2라는 브랜치로 로컬로 갖고왔다. 

 

*모든 브랜치 땡겨오기 

#git fetch <remote_name>
git fetch test

 

 

3. 요약 

최대한 자세하게 설명하려고 순서가 실무에서 사용하는거랑은 필요없는 것도 많다. 

그래서 세줄 요약 들고옴!

 

1.브랜치는 Git에서 코드를 분기하여 관리하는 개념이고 (목차 1) 

2.원격 저장소에서 일부 브랜치만 fetch 해와서 (목차 2-3) 

3.로컬에서 수정한 코드를 원격 저장소에 push 해주면 된다. (목차 2-2) 

4.이렇게 작업된 branch들을 main 브랜치에 merge 해준다. 

- 보통 실무에선 merge 하는 규칙이있어서, 제일 중요한 브랜치의 경우 모두의 확인을 받아야 할 수 있게 하는 경우도 있구 pull request (push가 브랜치에 다이렉트로 올리는 거였다면 pr은 약간 허락받는...늑김) 를 날려서 코드리뷰를 받고 머지하는 경우도 있다고 한다! (C님이 알려쥼!) 

 

 

 

 

자 이렇게 장장 2주에 걸쳐 쓴 깃허브 브랜치 설명이 끝났다.  첫 게시글에 비해 좀 재밌게 써볼려고 했는데 나이가 들어가니 드립력도 떨어지고 트렌디하게 쓰는게 힘든 것 같다. 오늘도 긴 글 읽어주셔서 감사합니다! 

 

 

 

레퍼런스

https://blog.naver.com/seek316/222344170901

https://goddaehee.tistory.com/274

https://mylko72.gitbooks.io/git/content/branch/checkout.html

https://covenant.tistory.com/206#google_vignette

https://ittrue.tistory.com/89

'깃허브 github' 카테고리의 다른 글

[Git] 뉴비를 위한 Github 사용법 총정리 (CLI ver)  (8) 2023.04.14

댓글