사이먼's 코딩노트

[GitHub] 깃 브랜치 본문

GitHub

[GitHub] 깃 브랜치

simonpark817 2024. 5. 20. 22:24

[Git Branch (깃 브랜치)]

  • 브랜치란 독립적으로 어떤 작업을 진행하기 위한 개념이다.
  • 소프트웨어를 개발할 때 개발자들은 동일한 소스코드를 함께 공유하고 다루게 되는데, 동일한 소스코드 위에서 어떤 개발자는 버그를 수정하기도 하고, 새로운 기능을 만들어 내기도 한다.
  • 이와 같이 여러 사람이 동일한 소스코드를 기반으로 서로 다른 작업을 할 때, 각각 서로 다른 버전의 코드가 만들어지기 마련이다.
  • 이럴 때 동시에 다양한 작업을 할 수 있게 만들어주는 기능이 바로 '브랜치(Branch)' 이다.
  •  팀 프로젝트를 수행할 때 GitHub를 관리하기 위해선 깃 브랜치 전략이 필수적이다.
  •  Git에선 Master라는 브랜치를 default로 사용하고, GitHub에선 Master 대신 Main을 사용한다.
  • 여담이지만, GitHub에서 Master를 사용하지 않는 이유는 주종관계가 연상된다는 이슈로 Main을 사용한다는 썰이 있기도 하다.
  •  사실 크게 의미는 없지만, 요즘 추세가 default를 Main으로 두고 사용하니 이 점, 참고 바랍니다.
  • 브랜치 이름을 master에서 main으로 변경하는 방법은 'git branch -m master main' 명령어를 입력한다.

 

[git commit]

  • commit은 Git 저장소에 사용자가 생성한 디렉토리 아래에 있는 모든 파일에 대한 스냅샷을 기록하는 것이다.
  • commit은 의미있는 변경 작업들을 저장소에 기록하는 동작을 의미하며, 코드 변경 시점을 저장함으로써, 잘못된 동작을 발견했을 때는 특정 시점으로 돌아갈 수도 있다.
  • commit은 새롭게 변경된 부분만 추출해서 저장한다.
  • 단순히 'git commit' 명령어만 실행하면 vi 편집기 실행과 동시에 commit 메시지를 입력해야한다.
  • 이 과정을 한 번에 처리하기 위해선 'git commit -m "메시지 내용"' 명령어를 실행하면 된다.

 

[git branch]

  • 브랜치는 특정 커밋에 대한 참조라고 생각하면 좋고, 브랜치를 많이 생성해도 메모리나 디스크 공간에 크게 부담이 되지 않기 때문에 작은 단위로 잘게 나는 것이 좋다.
  • 브랜치를 생성하는 방법은 'git branch '브랜치 명'' 명령어를 실행하면 된다.

 

[git checkout]

  • 체크아웃은 저장소에서 특정 커밋이나 브랜치로 돌아가고 싶을 사용한다.
  • 쉽게 말하자면 현재 브랜치에서 원하는 브랜치로 이동할 때 체크아웃을 사용한다.
  • 브랜치를 이동하는 방법은 'git checkout '이동하고자 하는 브랜치 명' 명령어를 실행하면 된다.

 

[git merge]

  • merge는 병합이라는 뜻으로 작업 내용을 합치는 방법을 의미한다.
  • 서로 다른 브랜치에서 작업을 했거나, 작업 내용을 합쳐야 하는 경우 merge를 해주면 된다.
  • bugFix라는 브랜치와 main 브랜치가 있다고 가정해보자.
  • 각 브랜치에는 독립된 커밋이 하나씩 존재하고, main 브랜치를 기준으로 두 브랜치를 병합하는 방법은 'git merge bugFix' 명령어를 실행하면 된다.
  • 반대로 체크아웃을 이용해서 bugFix 브랜치로 이동한 뒤 main 브랜치와 병합을 하고 싶다면, 'git merge main' 명령어를 실행하면 된다.

 

[git rebase]

  • 리베이스도 병합(merge)과 마찬가지로 한 브랜치에서 다른 브랜치를 합치는 방법 중 하나이다.
  • 리베이스는 기본적으로 커밋들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것이라고 생각하면 좋다.
  • 기본 명령어의 형태는 'git rebase '브랜치 명''이고, 여기에 -i 속성을 추가한 git rebase -i '브랜치 명'~4'와 같은 명령어를 사용하게 되면 리베이스의 목적지가 되는 곳(브랜치 명을 기준으로 4개 위) 아래에 복사될 커밋들을 모두 보여주고, 각 커밋을 구분할 수 있는 해시들과 메시지도 함께 vi 편집기를 통해 볼 수 있다.
  • 이 때 편집기를 통해 기존의 있던 커밋을 순서를 바꾸거나 원하지 않는 커밋들을 제외해서 리베이스(복사)를 할 수 있다.

 

[git cherry-pick]

  • 체리픽은 다른 브랜치에 있는 커밋을 선택적으로 내 브랜치에 적용시킬 때 사용한다.
  • 'git cherry-pick <커밋이름> <커밋이름> ...' 명령어를 사용하여 현재 내가 사용하는 브랜치 기준으로 명령어에서 선택한 커밋을 복사할 수 있다.

 

[git reset, revert]

  • 리셋은 이전 커밋으로 돌리는 방법 중 하나이다.
  • 돌아가고 싶은 커밋으로 갈 때 사용하거나, main 브랜치로 릴리즈를 했는데 치명적인 버그로 인하여 롤백해야하는 경우에 해당 명령어를 사용한다.
  • 'git reset HEAD~1' 명령어를 실행하면 현재 HEAD에서 가리키던 커밋을 바로 직전에 커밋으로 옮긴다.
  • 리버트는 리셋과는 다르게 커밋을 삭제하는 것이 아닌 커밋을 추가하지만 이전 커밋과 정반대의 데이터를 추가하는 방식으로 코드를 되돌리는 역할을 한다.
  • 'git revert HEAD' 명령어를 실행하면 현재 커밋에서 커밋을 삭제하지 않고 새로운 커밋이 생성되어 변경 내용이 기록되는데, 해당 변경내역이 정확히 반대의 내용을 담고있다.

 

[참고 사이트]

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

 

 

 

반응형

'GitHub' 카테고리의 다른 글

[GitHub] 깃허브 협업  (0) 2024.05.30
[GitHub] Git 인터렉티브 실습  (0) 2024.05.21
[GitHub] 깃허브 세팅 명령어  (0) 2024.02.19