Stack/Git

Let's Git it!

annovation 2025. 1. 19. 10:12

Git

Git은 분산형 버전 관리 시스템 (DVCS, Distributed Version Control System)입니다. 개발자들이 코드를 작성하고 수정하는 과정에서 발생하는 파일들의 변경 내역을 효율적으로 관리하고, 여러 사람과 협업할 수 있게 도와주는 도구입니다.


분산형 버전 관리 시스템 

분산형 버전 관리 시스템(DVCS, Distributed Version Control System)은 버전 관리 시스템의 한 종류로, 파일과 코드의 변경 이력을 전체 프로젝트의 모든 참여자가 각자 로컬에서 관리하는 시스템입니다. 중앙 서버 없이도 각 사용자가 독립적으로 작업할 수 있으며, 변경 사항을 서로 동기화할 수 있습니다.


주요 명령어

1. commit : 코드 변경사항을 기록하는 단위

git commit -m "message"
  • Git에서 작업한 변경 사항을 저장하는 최소 단위입니다.
  • 각 커밋은 고유한 ID(해시값)를 가지며, 변경된 내용과 함께 설명 메시지를 포함합니다.
  • 프로젝트 히스토리를 체계적으로 관리하며, 필요 시 특정 시점으로 돌아가거나 비교할 수 있습니다.

 

2. HEAD : 현재 브랜치 또는 커밋을 가리키는 포인터

  • Git에서 현재 작업 중인 브랜치 또는 커밋을 나타냅니다.
  • 기본적으로 HEAD는 현재 체크아웃된 브랜치의 최신 커밋을 가리키지만, 특정 커밋을 직접 체크아웃하면 해당 커밋을 가리키게 됩니다.

 

3. branch : 코드를 분기하는 기준, 언제든 만들고 지우는게 가능하다

이미지 1 출처 : https://www.atlassian.com/git/tutorials/using-branches

 

  • 브랜치는 코드의 독립적인 작업 공간을 만듭니다.
    각 브랜치는 기존 커밋을 기준으로 생성되며, 새로운 기능 개발, 버그 수정 등 독립적인 작업에 사용됩니다.
  • 브랜치는 필요할 때 언제든 생성하고 삭제할 수 있습니다.
  • 브랜치를 사용하면 팀 내 여러 개발자가 충돌 없이 동시에 작업할 수 있습니다.

 

4. merge : 브랜치를 병합하는 명령어

  • 다른 브랜치에서 작업한 내용을 현재 브랜치에 통합합니다.
  • commit 단위로 이루어지며, 병합 시 충돌(conflict)이 발생할 수 있습니다. 충돌이 발생하면 수동으로 해결해야 합니다.
  • 주로 기능 개발이 완료된 브랜치를 main 브랜치로 통합할 때 사용됩니다.

5. squash : 히스토리 정리를 위한 병합 

  • 여러 commit을 하나로 압축하여 병합합니다.
  • 기능 브랜치에서 다수의 commit으로 작업한 후, 이를 하나의 commit으로 압축하여 메인 브랜치에 병합할 때 유용합니다.
  • 히스토리를 깔끔하게 정리하여 이력을 더 간결하게 유지할 수 있습니다.

6. rebase : 브랜치의 참조 기준점을 변경

  • 브랜치가 참조하는 commit 기준점을 변경하여 commit 순서 재배열
  • conflict 해결하는 방법
  • base branch가 변경될때마다 해주면 conflict 방지
  • 충돌 발생 시 충돌 내용을 확인하고, 수동으로 해결한 후 다시 rebase --continue를 실행합니다.

7. checkout : 브랜치나 커밋으로 전환

  • 다른 브랜치로 전환하거나 특정 커밋을 체크아웃하여 작업 디렉토리를 해당 상태로 변경합니다.
  • ex. git checkout <branch-name>으로 브랜치를 전환하거나, git checkout <commit-hash>로 특정 커밋을 체크아웃합니다.

그 외 기능

1. cherry-pick : 특정 커밋을 다른 브랜치에 적용

  • 전체 브랜치를 병합하지 않고, 원하는 특정 커밋만 선택적으로 적용합니다.
git cherry-pick <commit-hash>

 

2. stash : 변경 사항을 임시로 저장

  • 현재 작업 중인 변경 사항을 임시로 저장하고, 작업 디렉토리를 깨끗한 상태로 만듭니다.
git stash        # 변경 사항 저장
git stash apply  # 저장된 변경 사항 복원

 

3. submodule : 프로젝트 안에 다른 Git 프로젝트 포함

  • 외부 라이브러리나 의존성을 독립적으로 관리하며, 주 프로젝트와 별도로 업데이트 가능합니다.
git submodule add <repository-url> <path>
git submodule update --init --recursive

참고하면 좋은 사이트

1. squash : https://www.delftstack.com/ko/howto/git/git-squash-commits/

 

Git 스쿼시 커밋

이 튜토리얼은 Git에서 커밋 스쿼싱에 관한 것입니다. Git에서 커밋 스쿼시는 여러 커밋을 하나로 결합하는 것을 의미합니다.

www.delftstack.com

2. rebase : https://tlatmsrud.tistory.com/156

 

[Git] Git Rebase 란? / 쉽게 이해하기 / 예시

1. 개요 앞선 포스팅에서는 Git Merge 에 대해 알아봤다. 코드 충돌이 나는 원인과 과정을 이해하고, Fast Forward Merge , 3-Way-Merge 가 어떤 상황에 발생하는지도 알았다. 다음은 병합과 연관되는 또 다른

tlatmsrud.tistory.com

3. cherry-pick : https://imasoftwareengineer.tistory.com/7

 

git 명령어 : git cherry-pick

git을 이용해 코드 관리를 하다보면 커밋을 다른 브랜치에 잘못 하거나, 요구사항이 바뀌어 필요 없는 커밋이 생기거나, 코드 의존성(dependency) 때문에 다른 사람의 커밋 중 일부를 가져와야 하는

imasoftwareengineer.tistory.com

4. stash : https://jupiny.com/2024/07/22/use-git-stash/

 

git stash 사용하기

git으로 코드 형상을 관리하면서 로컬에서 열심히 작업하는 도중에, 아래와 같은 상황들이 종종 생긴다. 현재 하고 있는 일을 잠깐 내려두고 다른 커밋부터 빠르게 만들어야하는 경우 최신 코드

jupiny.com

5. submodule : https://tommykim.tistory.com/89

 

[Git] SubModule에 대해서

들어가기 앞서 최근에 프로젝트에 투입되어 Github에 있는 code를 다운로드하여 확인하는 도중 특정 module 하위에 아무런 코드가 존재하지 않아 컴파일 에러가 나 당황했던 적이 있습니다. 동료에

tommykim.tistory.com


TMI 

아직 뭐가 뭔지 잘 모르겠다.

직접 써봐야 머릿속에 정리가 될 것같다!


출처

1. OpenAI ChatGPT (https://openai.com)

2. 2024 프로그래머스 백엔드 데브코스 3기 4회차 수업

3. 이미지 1 출처 : https://www.atlassian.com/git/tutorials/using-branches

 

Git Branch | Atlassian Git Tutorial

This document is an in-depth review of the git branch command and a discussion of the overall Git branching model.

www.atlassian.com

반응형

'Stack > Git' 카테고리의 다른 글

[Git] Commit Message  (0) 2025.01.25
[Git] Git workflow 브랜치 전략  (1) 2025.01.24
GitHub  (1) 2025.01.21
[Git 명령어] reset VS revert  (0) 2025.01.20
[Git] 맥 GitHub Repository 연결하기 feat. InteliJ  (0) 2024.12.10