[Git] git 명령어, 작업 Workflow

매정·2022년 4월 28일
1

버전 관리 시스템(Version Control System)

내용이 지워질 경우를 대비해 보존을 해주는 시스템

  • Git: 개발자의 코드를 효율적으로 관리하기 위해서 개발된 ‘분산형 버전 관리 시스템
  • 스냅샷: 특정 시점에 생성된 백업 복사본
  • Commit: 스냅샷을 만들어 주는 작업
  • Github: Git Repository를 관리할 수 있는 클라우드 기반 서비스
  • Git Repository: 저장소, 파일이나 폴더를 저장해두는 곳
  • Fork: 하나의 프로젝트에 contribute를 하기 위해 프로젝트 Remote Repository를 나의 Local Repository로 가져오는 작업
  • Clone: Fork로 가져온 코드를 내 컴퓨터로 가져오는 작업
  • Push: 내 컴퓨터에서 변경한 코드를 Remote Repository에 반대로 올려주는 과정
  • Pull: Remote Repository에 변경 사항이 있을 때 Local Repository로 가져오는 작업

혼자 작업 Workflow

  1. Fork: 내 계정으로 Remote Repository를 가져옴

  2. Clone: Remote Repository에 있는 파일을 작업하기 위해 내 컴퓨터로 복사해옴
    git clone <레파지토리 주소>

~ 기능 구현 완료 ~

  1. Commit 으로 변경 사항의 저장 기록 남기기 전, 현재 Local에 어떤 것이 있는지 확인 → 내 로컬의 staging area, untracked files 목록을 확인 가능 git status

  2. add: 파일을 commit 할 수 있는 상태로 만들어 줌.
    git add <파일명> : 내 Local의 untracked file을 Git 관리 하인 staging area로 추가.
    Staging area에 추가한 상태에서 파일을 수정한다면 → staged면서 modified인 상태가 됨.
    git add . : 모든 파일을 한번에 추가 (선호되지 않음)

  3. restore: 변경사항을 폐기하는 명령어. commit 되지 않은 Local Repository의 변경 사항 폐기 후 다시 처음으로 clone 받아 온 상태가 됨. git restore <파일명>

  4. Commit: 변경 사항 저장! 스냅샷 찍듯 변경된 이력을 언제, 누가, 어떻게 변경되었는지 저장할 수 있음. -m 을 사용해 코멘트 작성 가능 git commit -m ‘<커밋 코멘트>’

  5. Reset: local에서 commit한 내용을 취소할 때
    git reset HEAD^ → 가장 최신의 commit을 취소함. HEAD~1도 가능

  6. Push: Local의 commit 기록들을 Remote로 업로드
    git push <origin> <branch> : 리모트에 있는 origin의 master 브랜치에 local Repository의 변경 사항 업로드
    git log : 남긴 commit들이 잘 기록되었는지 확인.

  7. Pull Request(PR): Remote에 Push해 놓은 변경사항을 다른 사람에게 알림

함께 작업 Workflow

  1. 내 컴퓨터에서 생성한 디렉토리를 init 명령어를 통해 Git의 관리하에 들어가게 만들어 줌
    git init : 디렉토리를 Git Repository로 변환하거나 새로운 Repository를 초기화하는데 사용
  2. 내 컴퓨터의 Git 디렉토리(Local Repository)를 Remote Repository와 연결
    git remote add origin <Repository 주소>
  3. 다른 사람과 협업 시, 다른 사람의 Repository 연결 git remote add <다른사람><Repository 주소>
    연결된 모든 Remote Repository 목록 확인 git remote -v
  4. pair의 변경 사항과 나의 변경 사항을 Remote Repository를 통해서 공유 다른 사람의 작업 내용 가져오기 git pull <다른사람><branch> : Remote Repository의 branch 내용을 Local Repository로 가져옴. 받아온 내용은 자동으로 병합됨.
    • 병합 중 실패 (Merge conflict) : 페어가 만든 코드와 내 코드가 병합 중에 충돌함 : git status 로 어떤 파일이 충돌되고 있는지 알 수 있음.
    • Accept Current Change: 내가 수정한 내용으로 파일에 반영
    • Accept Incoming Change: Remote Repository의 내용으로 파일에 반영
    • Accept Both Changes: 변경 사항 모두 반영
      충돌 파일 수정 → staging area로 추가 → 병합 커밋(merge commit) 생성 → git commit으로 커밋 코멘트 작성 → git push origin master 로 Remote Repository에 Push

브랜치

독립적으로 어떤 작업을 진행하기 위한 개념
각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에 여러 작업을 동시에 진행할 수 있음.

장점

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

master 또는 main이라는 이름을 가진 통합 브랜치에 뿌리를 둠.
나누어진 브랜치에서 각자 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있음.
분리된 작업 영역(브랜치)에서 변경된 내용들은 다른 브랜치와 병합(merge)함으로써 새로운 하나의 브랜치로 모을 수 있음.

브랜치 종류

  • 통합 브랜치 (Integration Branch): 배포될 소스 코드가 기록되는 브랜치. main 또는 master 브랜치
  • 피처 브랜치 (Feature Branch): 기능 추가, 버그 수정과 같이 단위 작업을 위한 브랜치. 통합 브랜치로부터 만들어내며 피처 브랜치에서 하나의 작업이 완료되면 다시 통합 브랜치에 병합

브랜치 명령어 모음

  • 새로운 브랜치 생성
    git branch 새로운 브랜치 이름

  • 새로운 브랜치 생성 후 해당 브랜치로 전환
    git switch -c 새로운 브랜치 이름
    git checkout -b 새로운 브랜치 이름

  • 브랜치 목록 확인
    git branch

  • 브랜치 목록과 각 브랜치의 최근 커밋 확인
    git branch -v

  • 브랜치 삭제
    git branch -d 삭제할 브랜치 이름
    git branch -D : 병합하지 않은 브랜치를 강제 삭제하는 방법

  • 브랜치 전환
    git switch 브랜치 이름
    git checkout 브랜치 이름

  • 브랜치 병합 (master 브랜치로 dev 브랜치를 병합할 때)
    git checkout master : 먼저 master 브랜치로 이동
    git merge dev

  • 로그에 모든 브랜치를 그래프로 표현
    git log --branches --graph --decorate

  • 아직 commit 하지 않은 작업을 스택에 입시로 저장
    git stash

프로젝트 workflow

feature/login을 만들고, 세부 기능인 feature/login-oauth를 따로 만들고, feature/login과 feature/login-oauth를 병합하고 싶을 때:

  1. git clone 명령어로 Repository를 Local로 가져옴.

  2. 브랜치를 생성하고 생성한 브랜치로 이동하기

  3. 브랜치 생성을 잘 했는지 확인하기 위해 생성한 브랜치 목록 및 현재 위치한 브랜치 확인하기 git branch

  4. 로그인 기능을 만들고 싶다! feature/login이라는 브랜치 생성하고 브랜치로 이동 git checkout -b feature/login

  5. 로그인에 oauth 기능을 추가하고 싶다! feature/login-oauth 라는 이름으로 feature/login 브랜치에서 파생된 브랜치를 하나 더 만들어서 작업함. git checkout -b feature/login-oauth

  6. feature/login-oauth를 구현 완료했다면 feature/login 브랜치로 병합(merge)해야 한다. 우선 feature/login으로 이동해야 한다. git checkout feature/login

  7. 현재 위치가 feature/login 상태에서 git merge feature/login-oauth 명령을 입력해 병합한다.

  8. 로컬의 작업 내용을 Remote Repository에 업로드: git push origin feature/login

  • merge와 rebase의 차이

    • merge: 변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해짐.
    • rebase: branch base를 이동시킨다는 뜻으로, 머지처럼 브랜치 통합을 목적으로 하지만 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 함.
      - git rebase main feature/login 명령어를 입력하면 main의 가장 최신 커밋으로 브랜치가 가리키는 곳이 변경됨.

더 많은 git 명령어 알아보기 >> https://dangitgit.com/ko

profile
Prospective Entrepreneur

0개의 댓글