Git 브랜치(branch)는 Git 버전 관리 시스템에서 코드를 효과적으로 관리하고 개발하는 데 사용되는 기능 중 하나입니다. 브랜치는 코드의 특정 버전을 나타내는 포인터이며, 개발자들은 동시에 여러 가지 작업을 진행하거나 서로 다른 기능을 개발할 수 있도록 도와줍니다.
새로운 기능을 추가하거나 버그를 수정하려고 할 때, 기존의 코드를 변경하지 않고 새로운 브랜치에서 작업할 수 있습니다. 이는 여러 작업이 서로 간섭하지 않고 병렬로 진행될 수 있도록 합니다. 작업이 완료되면, 해당 브랜치를 기존의 코드에 통합할 수 있습니다.
아래와 같이 각 Commit은 해시 코드를 가지고 있으며 부모의 해시코드를 가리키고 있습니다.
Master Branch는 Git 저장소에서 기본적으로 생성되는 기본 브랜치 중 하나입니다. 이 브랜치는 초기 Git 저장소를 생성할 때 자동으로 만들어지며, 보통 프로젝트의 초기 상태를 나타냅니다. 개발자들은 이 "master" 브랜치에서 작업을 시작하고, 여기에 있는 코드를 기반으로 새로운 기능을 개발하거나 버그를 수정할 수 있습니다.
아래 그림에서 보이는 main이 Master Branch를 의미합니다.
또한, 'On Branch main'도 이를 의미합니다.
"master" 브랜치는 Git 저장소를 초기화할 때 기본적으로 생성되는 기본 브랜치의 이름 중 하나였습니다. 그러나 Git의 사용 방식이 변화하면서 "master" 브랜치의 이름 대신 "main"이나 다른 이름을 사용하는 추세가 있습니다. 이것은 주로 다양한 이유로, 특히 다양한 문화적 및 언어적 이슈와 함께 사용자 커뮤니티에서의 더 나은 포용성을 위해서입니다.
>git branch
저장소에 있는 현재 존재하는 브랜치 목록을 보여줌
(*가 있는 곳이 현재 위치하는 Branch)
# Head -> Master
HEAD -> master는 Git에서 현재 작업 중인 브랜치와 커밋을 나타내는 표기입니다.
HEAD: Git에서 현재 작업 중인 커밋을 가리키는 포인터입니다. HEAD는 현재 브랜치의 최신 커밋을 가리키거나, 직접적으로 커밋을 가리키는 "detached HEAD" 상태에 있을 수 있습니다.
master: 이는 현재 작업 중인 브랜치의 이름입니다. "master"라는 브랜치에서 작업 중이라는 것을 나타냅니다.
* Head는 언제나 master branch에서 가장 최근에 commit한 branch를 가리킴
3. Branch 생성 및 전환
>git branch <branch-name>
새로운 branch를 만듦 (Note : 만든 branch로 이동하는 것이 아님)
=> Head는 master와 새로 만든 branch를 가리킴
★
>git switch <branch-name>
branch간에 이동
★★
>git switch -c <branch-name>
branch를 생성 후, 생성된 branch로 이동
>git checkout <branch-name> git switch와 동일한 작업을 하지만, 오래된 명령
※ 주의 사항
파일을 수정한 후, git switch 명령시 데이터가 삭제될 수 있어서 오류가 발생합니다.
깃크라켄(GitKraken)은 Git을 시각적으로 관리하고 사용할 수 있게 해주는 Git 클라이언트입니다. Git은 분산 버전 관리 시스템으로, 소스 코드의 효율적인 협업과 관리를 위해 사용됩니다. GitKraken은 사용자가 Git 프로젝트를 더 쉽게 관리할 수 있도록 도와주는 툴이며, 그래픽 사용자 인터페이스(GUI)를 제공하여 Git 명령어를 사용하지 않고도 프로젝트를 관리할 수 있습니다.
GUI는 브랜치 및 히스토리 시각화, 충돌 해결, 머지 시각화 등을 제공하여 사용자 경험을 향상시키고 팀 협업을 지원합니다.
Atomic Commits은 소프트웨어 개발에서 사용되는 개념으로, 한 번의 커밋에서 하나의 독립적인 변경 사항만을 포함하는 것을 의미합니다. "Atomic"은 원자적인 변경이라는 뜻이며, 이는 커밋이 마치 하나의 원자처럼 분할할 수 없는 단위로 간주되어야 함을 나타냅니다.
- 가독성 향상: 각 커밋이 한 가지 변경 사항만을 포함하면 코드 변화를 추적하고 이해하기 쉽습니다. 이는 팀원들이나 나중에 코드를 검토하거나 유지보수할 때 도움이 됩니다.
- 롤백 용이성: 하나의 원자적인 변경 사항이 실패하면 해당 변경 사항만 롤백할 수 있습니다. 전체 커밋이 실패하는 경우보다 문제 해결이 빠릅니다.
- 협업의 편의성: 여러 명의 개발자가 협업할 때, Atomic Commits를 사용하면 각자의 작업을 조율하고 통합하는 데 도움이 됩니다.
2. Commit Message
Git Docs에 따르면 현재시제의 메세지를 쓸 것을 권장합니다. (명령어를 사용하여 do, make, create ..)
-> 오래된 관례로 꼭 따르지 않아도 됨.
-> 자신에게 주어진 환경에 맞게 사용 (회사에서는 회사 내규에 따라...)
3. Git Log
>git log
>git log --oneline
log를 한 줄로 깔끔하게 보여줌
4. --amend 실수 수정
git commit --amend
바로 직전의 commit을 수정할 수 있음
(수정 사항을 stage에 올리고 위 명령어를 입력하면 적용)
5. 파일 무시하기
일부 공개되기 싫거나 숨기고 싶은 파일을 깃으로 추적하지 않도록 설정하는 것
(ex. 보안키, 언어의 라이브러리 파일들, OS 전용 파일, ...)
repository안에 .gitignore 파일을 만들어 추적하고 싶지 않은 목록을 만들어서 사용
Git Repo는 Git이라는 분산 버전 관리 시스템을 사용하여 관리되는 저장소(Repository)를 가리킵니다.
Git Repo에는 프로젝트의 모든 파일과 폴더, 그리고 각 파일의 변경 이력이 포함되어 있습니다. 이러한 저장소는 로컬 컴퓨터에 있을 수도 있고, 원격 서버에 있을 수도 있습니다. 여러 개발자가 협업할 때, 중앙 저장소나 원격 저장소를 사용하여 소스 코드를 공유하고 업데이트할 수 있습니다.
Repository
- 깃저장소(작업공간)
- 각각 독립된 프로젝트를 의미
2. Git Init & Status
>git status
깃 저장소에 대한 정보 / 폴더 내 내용 변화 감지-> git이 계속 관찰 중임
>git init
new git repository -> 현재 repository를 git 저장소로 초기화 (프로젝트 당 한번 사용)
* git init 사용하면 폴더에 숨김 폴더 .git 생성
* git repository 밑에 있는 폴더는 이미 git의 영향권에 있음 ->>git status를 이용해 확인 후 >git init을 할 것
(이미 git영향을 받고 있는데 init하면 문제가 생길수도) => .git을 제거하여 해결
3. Commit Flow
commit
git 저장소의 check point 중 하나
* 선택적으로 commit이 가능
-> 여러 변경 사항을 한번에 commit가능 (원하는 시점에서 commit 가능)
4. Git Add로 변경 사항 스테이징
working directory
실제 작업 공간(폴더)
starting area
commit 전에 변경 사항들을 등록하는 곳
★★
>git add file1 file2
starting area에 file 추가
5. Git 명령어
>git commit
>git commit -m "my message"
message와 함께 commit (message: 변경 사항 등을 확인할 수 있게 달아두는 주석)