2 분 소요

Git, Github


Git이란 개발자의 코드를 효율적으로 관리하기 위해서 개발된 ‘분산형 버전 관리 시스템’으로 변경사항 및 버전을 추적하기 용이한 시스템이다.

Github란 Git Repository를 관리할 수 있는 클라우드 기반 서비스이다.

  • Repository

    repository

Git 명령어

위와 같이 Git과 Repository를 통해 효율적으로 코드를 관리하고 공유할 수 있다. 이에 혼자 작업 할 때, 함께 작업할 때, 브랜치 작업 예시는 다음과 같다.

혼자 작업 workflow


1

1) Fork : Remote에 있는 다른 Repository에서 Remote에 있는 내 Repository에 가지고 온다.

2

2) Clone : Fork한 코드를 수정하기 위해 내 컴퓨터로 가져온다.

git clone <Repository URL>

3) Add : 내 컴퓨터에서 작업한 파일을 git 관리하에 있는 상태인 Staging Area에 올려줄 수 있다.

git add . 
git add <changed file name>
  • 이때 Staging Area의 상태 및 추적되지 않은 파일(Untracked File)은 “git status” 명령어로 확인 가능하다.
  • 또한, 이 단계까지(commit 전)는 “git restore [file name]” 명령어로 변경 사항을 돌릴 수 있다.

4) Commit : stagin area에 들어온 파일을 내 remote repository에 push하기 위해 commit 과정을 거친다.

git commit -m "commit msg"
  • 현재까지 커밋된 내역들을 “git log”를 통해 확인할 수 있다.
  • commit을 취소하고 싶다면 “git reset”으로 취소할 수 있다.

5) Push : 커밋한 파일을 자신의 Repository에 기록한다.

git push origin <branch name>

내가 작업한 코드를 함께 작업


1) Init : 내가 local에서 작업한 directory를 git 관리하에 넣는다.

git init

2) Remote Add : 작업한 Local Repository를 github에서 원격으로 관리하기 위해 Local Repository와 Remote Repository를 연결한다.(이 때, 내 작업 폴더는 깨끗해야 한다.(“git status” 확인))

git remote add origin(short name) <Repository URL>
  • 이 때, Repository URL에 같이 작업하는 사람의 Repository URL을 넣는다면 나의 Local Repository와 상대방의 Repository와 연결할 수 있다.
  • 또한, 이렇게 연결된 목록은 “git remote -v”를 통해 확인할 수 있다.

3) Pull : Remote Repository의 작업 내용을 가져온다.

git pull <short name> <branch>
  • 작업 내용을 받아오면 받아오는 내용은 자동으로 병합(merge)된다.
  • 이 때, 동일한 라인을 수정한 파일이 존재한다면 병합되지 않고, 충돌이 발생하는데, 이는 “git status”에서 확인이 가능하다.
    • 또한, 충돌한 부분을 해결하려면
      • Accept Current Change : 내가 수정한 내용으로 파일에 반영
      • Accept Incoming Change : Remote Repository의 내용으로 파일에 반영
      • Accept Both Changes : 변경 사항 모두를 반영
      • 혹은 직접 수정
    • 으로 선택해서 해결이 가능하다.
    • 수정을 마치면, 병합 커밋을 생성해주기 위해 파일을 staging area로 올리고 commit(자동 커밋 메시지 생성), push가 가능하다.

브랜치


브랜치는 독립적으로 어떤 작업을 진행하기 위한 개념이다.

3

이를 활용하여

  • 한 소스코드에서 동시에 다양한 작업
  • 소스코드의 한 시점과 동일한 상태를 만들고, 브랜치를 넘나들며 작업을 수행
  • 각각의 브랜치에서 생긴 변화가 다른 브랜치에 영향을 주지 않고 독립적으로 코딩

이 가능하다.

브랜치 종류

  • 통합 브랜치(Integration Branch)
    • 배포될 소스 코드가 기록되는 브랜치
    • main, master
    • 해당 프로젝트의 모든 기능이 정상적으로 작동하는 상태의 소스코드
  • 피처 브랜치(Feature Branch)
    • 기능 추가, 버그 수정과 같이 단위 작업을 한 브랜치
    • 토픽 브랜치라고도 함

브랜치 명령어

  • 새로운 브랜치 생성
    • git branch [branch name]
  • 새로운 브랜치 생성 후 해당 브랜치로 전환(둘 중 하나)
    • git switch -c [branch name]
    • git checkout -b [branch name]
  • 브랜치 목록 확인
    • git branch
  • 브랜치 목록과 각 브랜치의 최근 커밋 확인
    • git branch -v
  • 브랜치 삭제
    • git branch -d [branch name]
    • git branch -D : 병합하지 않은 브랜치 강제 삭제
  • 브랜치 병합
    • master <- dev
      • git checkout master : master 브랜치로 이동
      • git merge dev : master에서 dev 병합
    • merge vs rebase
      • merge : 변경 내용의 이력이 모두 그대로 남아 있다.
      • rebase : 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 한다.
  • 로그에 모든 브랜치를 그래프로 표현
    • git log –branches –graph –decorate
  • 아직 commit 하지 않은 작업을 스택에 임시로 저장
    • git stash

git 명령어

본 포스팅은 코드스테이츠 BEB 과정을 수강하며 작성한 글입니다.

태그: ,

카테고리:

업데이트: