Git

[Git] Git 이론 익히기

yjenis 2024. 6. 5. 23:23

1. Git이란?

  • Git은 소스 코드를 관리하기 위한 분산 버전 제어 시스템
  • 버전 제어 시스템이란 사용자가 파일을 수정할 때 변경 사항을 기록하고 저장하므로 언제든지 이전 버전의 작업을 복원할 수 있는 시스템

1-1. Git 구성 요소

  • 작업 트리
    • 작업 중인 파일로 구성됨
    • 수정 할 수 있는 파일 시스템
  • 인덱스
    • 스테이징 영역으로도 불림
    • 커밋이 준비되는 곳
  • 저장소
    • 프로젝트 파일의 모든 변경 사항을 추적하는 “컨테이너”
    • 팀이 만든 모든 커밋 보관
     

1-2. 기본 Git 워크플로

  1. 작업 트리에서 파일을 수정
  2. 다음 커밋에 포함하려는 변경 사항을 준비합니다.
  3. 변경 사항을 커밋합니다. (커밋하면 인덱스에서 파일을 가져와 저장소에 스냅샷으로 저장합니다.)

 

 

2. 저장소

  • 저장소는 코드를 저장하기 위해 중앙에 위치한 폴더
  • 파일과 디렉터리가 포함된 Git 저장소가 있으면 변경 사항 및 버전 추적을 시작할 수 있음

2-1. 원격 저장소 대 로컬 저장소

  • 로컬 저장소는 개별 사용자를 위해 로컬 컴퓨터에서 호스팅 됨
    • 호스팅이란 서버 컴퓨터 전체 또는 일정 공간을 이용할 수 있도록 임대해 주는 서비스
  • 원격 저장소는 인터넷, 외부 서버, 다른 경로에 있는 동일한 시스템에서 호스팅되고 여러 팀 구성원 간에 공유됨

2-2. 저장소 생성

  • 새 저장소: GIt init 명령을 사용하여 처음부터 새 저장소 생성
  • 복사된 저장소: Git clone 명령을 사용하여 원격 저장소를 로컬 시스템에 복사할 수 있음

 

 

3. 변경 사항 기록

  • Git은 모든 변경 사항을 자동으로 기록하지 않으므로 인덱스에서 해당 변경 사항을 준비하여 기록하려는 변경 사항을 Git에 알려야 함
  • 스테이징 후 해당 변경 사항을 커밋하여 저장소에 기록할 수 있음

3-1. 변경하기

  • 작업 트리에서 변경(파일 편집, 새파일 추가, 불필요한 파일 제거)
  • 작업 트리의 변경 사항은 저장소와 작업 트리 사이에 있는 인덱스에 수정된 것으로 기록되지만 저장소에 직접 저장되지는 않음
  • 모든 변경 사항은 먼저 인덱스에 스테이징된 다음 저장소에 저장
  • 인덱스의 변경 사항만 저장소에 커밋됨

→인덱스 거쳐서 변경사항 반영됨

3-2. 변경 사항 커밋

  • Git commit 명령을 사용하면 저장소의 Git 기록에 파일 변경 사항을 기록할 수 있음
  • 커밋한 모든 변경 사항은 각 파일 또는 디렉터리에서 시간순으로 확인 가능

3-3. Git commit 메시지

  • 커밋을 진행할 때 메시지를 입력해야 하는데, 변경 사항을 간결하고 정확하게 설명해야 한다.

 

 

4. 변경 취소

  • git에서는 실수를 취소할 수 있음
  • 새 커밋을 만들때 프로젝트의 스냅샷을 저장하므로 필요할 때 이전 버전으로 돌아갈 수 있음
  • 주요 방법: git revert, gir reset

4-1. 커밋 취소

  • Git revert : 이전 커밋 취소
    • revert 명령은 이전 커밋의 변경 사항을 되돌리는 새 커밋을 만듦
    • 커밋을 제거하거나 저장소 기록을 수정하지 않아도 되므로 기록이 보존됨

4-2. 커밋 제거

  • Git reset : HEAD가 이전 커밋을 가리키도록 함
    • 재설정 모드로 전환하여 재설정 명령의 범위 지정
     

4-3. 재설정 모드

  • 혼합 (기본) 모드는 변경된 인덱스의 상태를 복원합니다.
  • 소프트 모드는 이전 커밋을 취소합니다.
  • 하드 모드는 커밋의 모든 흔적을 제거합니다.

 

 

 

5. 저장소 동기화

  • 어디에서 호스팅을 하든 다른 팀 구성원과 변경 사항을 공유하려면 로컬 저장소를 원격 저장소와 자주 동기화해야 함
  • Git push, git pull, git merge

5-1. 변경 사항 푸시

  • 변경 사항을 다른 사람과 공유하려면 git push을 사용하여 원격 저장소에 푸시
  • 이렇게 하면 원격 저장소가 업데이트 되고 로컬 저장소와 동기화 됨

5-2. 변경 사항 풀링

  • 누군가 공유 원격 저장소에 변경 사항을 푸시할 때마다 로컬 저장소가 구식이 됨
  • 로컬 저장소를 새로 업데이트된 원격 저장소와 다시 동기화하려면 git pull 실행
  • 풀 명령이 실행되면 원격 저장소에서 최신 개정 기록을 다운로드하고 로컬 저장소로 가져옴

5-3. 변경 사항 병합

  • 로컬 저장소가 오랜된 경우 원격 저장소에 대한 푸시가 거부됨
  • 이 경우 푸시하기 전 git merge를 사용해 원격 브랜치의 로컬 복사본에서 최신 변경 사항을 통합해야 함

5-4. 병합 충돌 해결

  • 병합을 제대로 완료하기 전에 해결해야 하는 충돌이 발생할 수 있음
  • 이런 일이 발생하면 Git은 충돌 파일에 충돌 해결 마커를 추가함
  • 마커는 수동으로 해결해야 하는 파일 섹션을 파악하는 데 도움이 됨

 

 

 

6. Git 기록 관리

6-1. 커밋 수정

  • Git commit —amend
    • 동일한 브랜치에서 가장 최근 커밋 수정
    • 새 파일이나 업데이트된 파일을 이전 커밋에 추가하는 데 용이함
    • 이전 커밋에 커밋 메시지를 편집하거나 추가하는 간단한 방법
     

6-2. 새 브랜치에 커밋 복사

  • Git rebase 을 실행하고 “-i” 옵션을 추가해 기록에서 개별 커밋을 다시 작성, 교체, 삭제, 병합
    • 과거 커밋 메시지 다시 쓰기
    • 커밋 그룹을 함께 스쿼시
    • 커밋되지 않은 파일 추가
     

6-3. 다른 브랜치에 커밋 복사

  • git cherry-pick
    • 잘못된 브랜치에서 올바른 브랜치로 커밋을 이동합니다.
    • 다른 브랜치의 기존 커밋을 기반으로 현재 브랜치에 커밋을 추가합니다.
     

6-4. 커밋 병합

  • git merge —squash
    • 새 커밋이 브랜치의 모든 커밋을 함께 그룹화하여 해당 커밋이 현재 브랜치에 병합됨
     

 

 

 

 

참고사이트

https://nulab.com/learn/

 

Learn | Nulab

Learn with Nulab. Our guides, how-tos, & content series offer tips to improve business management, career advancement, productivity, communication, & more.

nulab.com

 

 

리뷰

 - 부트캠프 초반에 아래와 같이 배운내용을 글자 그대로 암기하듯이 받아들이기만 한 점이 학습하면서 아쉬웠다.

 - 작은 프로젝트들을 진행하며 clone, push할 일들이 있었는데 정확한 이해가 부족한 채로 같은 방식만 반복해서 git을 활용했던 것 같다.

나중엔 최종 프로젝트를 진행하며 팀원과 git을 활용할 기회가 있었는데 이때에도 merge, 브랜치 정도만 알아둔채로 얼렁뚱땅 진행한 부분이 있었다고 느껴 시간이 남을 때, git 공부를 해두어야겠다고 다짐하였다.

- 더군다나 개발자로서 현업에서 일한다면 반드시 미리 알아두어야겠다는 생각이 들어 기본적인 개념부터 학습을 시작하였다.

- 한두번 정도 시간이 남을 때 강사님이 git에 관련된 어려운 문서를 제공해주신 적이 있는데 오히려 그런 자료를 보며 막연히 git에 대한 두렴이 커지기도 하였다.

- 하지만 이렇게 기초부터 차근히 공부하니 충분히 할 수 있겠다는 자신감이 생긴다.

- 백문이 불여일견이라고, 내일은 이론공부를 바탕으로 직접 이거저거 쳐보며 손과 뇌에 제대로 각인시켜야겠다.

 


 1.  작성
git touch a.txt

 2. 시작
git init

 3. 상태 확인(?)
git config —global -l

 4. 커밋 하기 (파일명 활용하여 개별적으로)
git add 파일명

 5. 커밋명 작성
git commit -m “커밋명”

 6.푸쉬하기 git remote add origin 링크
    git remote -v
    git push -u origin master

  •