Git은 코드 작업에 있어서 너무나도 중요한 도구라 사람들이 기술 스택이나 이력서에 아예 언급조차 하지 않는다는 점을 눈치채셨나요? 이미 알고 있을 거라는, 또는 적어도 필요한 만큼은 알고 있을 거라는 가정이 깔려 있죠. 하지만 정말 충분히 알고 있나요?
Git은 버전 관리 시스템(VCS)입니다. 코드를 저장하고 변경하며 다른 사람과 협업할 수 있게 해주는 보편적인 기술이죠.
개발자로서 우리의 일상은 코드를 읽고, 작성하고, 검토하는 데 집중되어 있습니다. Git은 우리가 사용하는 도구 중 가장 중요한 것 중 하나라고 할 수 있습니다. Git의 기능과 특징을 마스터하는 것은 개발자로서 자신에게 할 수 있는 최고의 투자 중 하나입니다.
그럼 시작해 봅시다.
기초 다지기
Git을 제대로 배우지 않으면 계속해서 머리를 긁적이며 같은 문제에 막히거나 터미널에서 또다시 병합 충돌을 마주할 날을 후회하게 될 수 있습니다. 이러한 상황을 피하기 위해 Git의 기본 개념을 정의해 보겠습니다.
브랜치 (Branches)
Git 저장소에는 "main" 또는 "master"(deprecated)라는 메인 개발 라인이 있으며, 여기서 여러 브랜치가 분기됩니다. 이 브랜치들은 동시에 여러 기능이나 수정을 병행하여 작업할 수 있도록 해줍니다.
커밋 (Commits)
Git 커밋은 업데이트된 코드를 묶어 특정 시점의 프로젝트 코드를 캡처합니다. 각 커밋은 이전 커밋 이후로 이루어진 변경사항을 기록하며, 프로젝트 개발의 전체적인 역사를 구축합니다.
커밋을 참조할 때는 일반적으로 고유한 암호화 해시 값을 사용합니다.
git show abc123def456789
이 명령어는 해당 해시 값을 가진 커밋의 상세 정보를 보여줍니다.
태그 (Tags)
Git 태그는 Git 역사 내에서 주요 이정표를 나타내며, 일반적으로 릴리스, 버전, 또는 중요한 커밋을 표시합니다. 이러한 태그는 프로젝트의 여정에서 특정 시점을 나타내는 데 매우 유용합니다.
헤드 (HEAD)
현재 체크아웃된 브랜치의 가장 최신 커밋은 HEAD에 의해 표시되며, 저장소 내의 모든 참조를 가리킬 수 있는 포인터 역할을 합니다. 특정 브랜치에 있을 때, HEAD는 해당 브랜치의 최신 커밋을 가리킵니다. 가끔 HEAD는 브랜치의 끝이 아닌 특정 커밋을 직접 가리킬 수도 있습니다.
스테이지 (Stages)
Git 단계를 이해하는 것은 Git 워크플로우를 이해하는 데 매우 중요합니다. 단계는 파일에 대한 변경사항이 커밋되기 전에 발생하는 논리적 전환을 나타냅니다. Git 단계를 더 자세히 살펴봅시다:
- 작업 디렉토리 (Working directory) 👷: 작업 디렉토리는 프로젝트 파일을 수정하고 생성하는 곳입니다. 로컬 머신에서 파일의 현재 상태를 나타냅니다.
- 스테이징 영역 (Staging area) 🚉: 스테이징 영역은 변경사항을 커밋하기 전에 준비하는 대기 영역 또는 사전 커밋 구역입니다.
- 로컬 저장소 (Local repository) 🗄️: 로컬 저장소는 Git이 커밋된 변경사항을 영구히 저장하는 곳입니다. 프로젝트의 역사를 검토하고, 이전 상태로 되돌리며, 동일한 코드베이스에서 다른 사람들과 협업할 수 있게 해줍니다.
- 원격 저장소 (Remote repository) 🛫: 원격 저장소는 중앙 서버(예: GitHub, GitLab, Bitbucket)에 위치하며, 프로젝트를 공유하고 다른 사람들과 협업할 수 있는 곳입니다.
Git 시작하기
어디서부터 시작해야 할지 고민이라면, Git에서는 작업 공간(workspace)에서 시작해야 합니다. 기존의 저장소(repository)를 포크(fork)하거나 클론(clone)하여 그 작업 공간의 복사본을 가질 수 있습니다. 만약 완전히 새롭게 로컬 폴더에서 시작하고자 한다면, 해당 폴더를 Git 저장소로 만들기 위해 git init 명령어를 사용해야 합니다. 다음 단계로는 자격 증명 설정을 반드시 잊지 말아야 합니다.
브랜치 작업
로컬에서 작업할 때는 현재 어떤 브랜치에 있는지 아는 것이 중요합니다. 다음 명령어들이 유용합니다:
# Will show the changes in the local repository
git branch
# Or create a branch directly with
git branch feature-branch-name
브랜치 간 전환을 위해서는:
git switch
또한, 브랜치 간 전환뿐만 아니라 다음과 같이 할 수도 있습니다:
git checkout
# A shortcut to switch to a branch that is yet to be created with the -b flag
git checkout -b feature-branch-name
저장소의 상태를 확인하려면 다음을 사용하십시오:
git status
현재 브랜치를 항상 명확하게 보기 위해서는 터미널에 브랜치를 표시하는 것이 좋습니다. 이를 도와주는 여러 터미널 애드온이 있습니다.
커밋 작업
커밋을 작업할 때, git commit -m을 사용하여 변경 사항을 기록하고, git amend를 사용하여 가장 최근의 커밋을 수정하며, 커밋 메시지 규칙을 지키는 것이 중요합니다.
git commit -m "의미 있는 메시지"
마지막 커밋에 변경 사항이 있을 때는 새 커밋을 만들지 않고 --amend 플래그를 사용하여 가장 최근 커밋을 수정할 수 있습니다:
# 변경사항을 추가
git add .
git commit --amend
이 명령어는 기본 텍스트 편집기를 열어 필요하면 커밋 메시지를 수정할 수 있게 합니다.
git push origin your_branch --force
기본적으로 자주 커밋하는 것이 더 좋습니다. 이는 진행 상황을 잃거나 스테이징되지 않은 변경사항을 실수로 리셋하는 것을 방지합니다. 이후에 여러 커밋을 합치거나 인터랙티브 리베이스(interactive rebase)를 통해 히스토리를 재작성할 수 있습니다.
git log를 사용하여 최근 커밋부터 과거로 거슬러 올라가는 순서로 커밋 목록을 확인할 수 있습니다.
원문
'레퍼런스' 카테고리의 다른 글
[Medium] ChatGPT를 일상에서 사용하는 법 (6) | 2024.10.23 |
---|---|
[Medium] 내가 원했던, Git 가이드 (2) (2) | 2024.09.29 |
[Medium] JPA vs Hibernate vs Spring Data JPA (0) | 2024.08.21 |
[Medium] 유용한 무료 IntelliJ Plugin 5가지 (0) | 2024.07.25 |
[Medium] Java Spring Boot에서 If-Else문 줄이기 (0) | 2024.07.10 |