본문 바로가기
Git, GitHub

Git과 GitHub

by taurusx 2023. 6. 28.

Git과 GitHub

  • Git : 분산 버전 관리 시스템(프로그램)
  • GitHub : 코드가 저장되어 있는 클라우드 저장소

 

Git은 분산 버전 관리 시스템(Distributed Version Control System)으로, 개발자들이 작성한 코드의 변경 사항을 추적하고 관리하는데 사용되는 프로그램이다. Git은 로컬 컴퓨터에 코드 저장소를 만들어 코드 변경 이력을 관리하며, 다른 개발자들과 협업할 수 있는 기능을 제공한다. Git을 사용하면 개발자들은 이전 버전으로 코드를 되돌리거나 여러 개발 브랜치를 관리할 수 있다.

 

GitHub는 Git으로 관리되는 코드 저장소를 호스팅하는 클라우드 플랫폼이다. 개발자들은 GitHub를 사용하여 자신의 코드를 업로드하고 다른 사람들과 협업하며, 문제를 추적하고 버그를 수정하는 등의 작업을 수행할 수 있다. GitHub는 소스 코드의 공개 여부를 설정할 수 있도록 지원한다.

 

 

형상 관리(SCM, Software Configuration Management)

형상 관리는 소프트웨어 개발에서 코드와 관련된 데이터의 변경사항을 추적하고 관리하는 것을 의미한다. 가장 널리 사용되는 형상 관리 시스템으로는 Git이 있다.

 

 

Git의 세 영역

(출처) https://www.geeksforgeeks.org/git-difference-between-head-working-tree-and-index/

 

  1. 작업 영역 : Git으로 관리되는 코드가 저장된 폴더, 작업 영역의 코드에 대해서 Git이 변경을 감지함
    • git init : 작업 영역 생성
  2. 인덱스 영역 : 작업 영역에서 변경된 코드를 기록하는 영역
    • git add . : 변경된 모든 코드를 인덱스 영역에 기록
  3. 헤드 영역 : 인덱스에 기록된 내용을 영구적으로 저장하는 영역
    • git commit -m "메모"

 

  • git status : 작업 및 인덱스 영역의 상태 확인 (변경 감지)
  • git log : 헤드 영역에 기록된 로그 확인

 

Git 설치 후 사용자 정보 설정 방법

 

Git - Git 최초 설정

Vim과 Emacs, Notepad++은 꽤 인기 있는 편집기로 개발자들이 즐겨 사용한다. Mac이나 Linux 같은 Unix 시스템, Windows 시스템에서 사용 가능하다. 여기서 소개하는 편집기들이 불편해서 다른 편집기를 사

git-scm.com

 

Git Reset (복구)

  • git reset 해시코드 : 이전 상태로 복구
  •  reset 후 commit까지 완료해야 복구가 반영된다.

[Reset 옵션 3가지]

  1. --soft : 헤드 영역에 저장된 현재 상태를 삭제하고 이전 상태로 복구 (commit 전으로 복구)
    • 커밋 로그 변경을 원하는 경우 사용
  2. --mixed : 헤드, 인덱스 영역에 저장된 현재 상태를 삭제하고 이전 상태로 복구 (add 전으로 복구)
    • 현재 상태의 작업영역 내용을 변경하고 싶은 경우 사용
  3. -- hard : 헤드, 인덱스, 작업 영역에 저장된 현재 상태를 모두 삭제하고 이전 상태로 복구
    • 이전 상태로 완전히 돌아가고 싶은 경우 사용

 

  • git reflog : hard를 통해 완전 삭제된 로그를 포함한 전체 로그 출력
    • 이미 삭제된 로그로 복구하고자 하는 경우 : git reset --hard 해시코드
  • git commit --amend -m "메모" : 첫 상태에서 커밋 로그 변경을 원하는 경우 사용

 

Git Branch (가지치기)

  • git branch : 전체 브랜치 출력
  • git branch 브랜치명 : 새 브랜치 생성
  • git checkout 브랜치명 : 해당 브랜치로 이동
  • git checkout -b 브랜치명 : 새 브랜치 생성 후 해당 브랜치로 이동
  • git branch -d 브랜치명 : 해당 브랜치 삭제
  • git branch -m 브랜치명 : 현재 위치한 브랜치명을 입력한 브랜치명으로 변경

 

Git Merge (합치기)

1) Fast-forward merge

 

Fast-forward merge는 한 브랜치가 다른 브랜치의 최신 커밋을 기반으로 생성된 경우 발생한다. Fast-forward merge는 변경 내용을 추가적으로 생성하지 않으며, 브랜치 포인터를 단순히 앞으로 이동시켜 최신 커밋을 가리키도록 한다.

 

2) 3-way merge

 

3-way merge는 두 브랜치의 끝점이 다른 커밋으로 나누어져 있을 때 발생한다. 3-way merge는 공통 조상 커밋을 찾고, 해당 커밋과 각 브랜치의 최신 커밋과 비교하여 변경 내용을 병합한다. 따라서 병합 결과 새로운 커밋이 생성된다.

 

  • git merge 브랜치명 : 입력한 브랜치를 현재 HEAD가 위치한 브랜치로 합침(병함)
  •  서로 다른 브랜치에서 같은 파일을 수정하고 merge하면 충돌이 발생할 수 있다.

 

Git Rebase (로그 정리)

  • git rebase -i HEAD~n : 현재 HEAD로부터 n개의 로그 병합 (파일은 그대로 유지되고 로그만 변경됨)

 

 

 

GitHub 원격 저장소 연결

  • git remote add origin repository_url : 입력한 URL의 원격 저장소를 origin이라는 이름으로 로컬 저장소와 연결
  • git ls-remote : 연결된 원격 저장소 확인
  • git remote rm origin : 원격 저장소(origin)와 연결 해제

 

GitHub Push (업로드)

  • git push origin 브랜치명 : 입력한 로컬 브랜치의 변경 내용을 원격 저장소(origin)의 동일한 브랜치로 업로드
  • git push --delete origin 브랜치명 : 원격 저장소(origin)에 있는 브랜치 삭제 (로컬 저장소에서는 브랜치삭제되지 않음)
  • git push -f origin 브랜치명 : 로컬 저장소와 원격 저장소(origin)의 형상이 다를 때 강제로 push함
  • 다른 개발자들의 작업 코드를 덮어쓰기 때문에 협업 시 사용에 주의해야 한다!

 

GitHub Fetch

  • git fetch origin : 원격 저장소(origin)의 최신 변경 내용을 가져온다. 이 단계에서는 로컬 저장소와 원격 저장소의 변경 내용을 비교하여 업데이트된 커밋이 있는지 확인한다. 이때 원격 저장소의 변경 내용은 로컬 저장소에 반영되지 않고, 단지 가져와서 확인만 한다.

 

GitHub Pull (다운로드)

  • git fetch와 git merge 명령어를 합친 명령어
  • git pull origin 브랜치명 : 입력한 원격 저장소(origin) 브랜치의 변경 내용을 가져와서, 로컬의 동일한 브랜치와 병합

 

GitHub Clone

  • git clone repository_url : git init (시작), git remote (연결), git pull (다운로드) 한번에 진행
  • 이때 repository의 master 브랜치만 clone 된다.

[다른 브랜치도 pull하는 방법]

방법 1.

  • git checkout -b 브랜치명
  • git fetch origin
  • git merge origin/브랜치명

방법 2.

  • git checkout -b 브랜치명
  • git pull origin 브랜치명

방법 3. (추천!)

  • git fetch origin
  • git checkout -b 브랜치명 origin/브랜치명
    • 로컬에 새 브랜치를 생성하면서 원격 저장소(origin)의 브랜치와 동기화시킴

 

 

로컬 저장소 Master 브랜치를 원격 저장소 Main 브랜치로 Push 과정

  1. git init
  2. git add .
  3. git commit -m "메모"
  4. git remote add origin repository_url
  5. git branch -m master main : 로컬 저장소의 master 브랜치명을 main으로 변경
  6. git pull origin main --allow-unrelated-histories : 원격 저장소(origin)의 main 브랜치 다운로드
  7. git push origin main : 로컬 저장소의 main 브랜치를 원격 저장소(origin)로 업로드

 

 

 

|

참고

  • (강의) https://www.youtube.com/playlist?list=PL93mKxaRDidFtXtXrRtAAL2hpp9TH6AWF

 

 

 

댓글