본문 바로가기

카테고리 없음

Git 정리

Git Flow

협업 중 수정된 코드의 충돌을 방지하기 위하여 브랜치를 분류한다.

팀에서 자체적으로 브랜치 명, 커밋 구조 등의 규칙인 컨벤션(관례)에 따른다.

  • main(master): 서비스를 직접 배포하는 역할을 하는 브랜치
  • feature(기능): 각 기능별 개발 브랜치, 주로 'feat/{기능_이름}'으로 명명
  • develop(개발): feature에서 개발된 내용이 저장되는 브랜치
  • release(배포): 배포를 하기 전 내용을 QA(품질 검사)하기 위한 브랜치
  • hotfix(빨리 고치기): main 브랜치로 배포를 하고 나서 버그가 생겼을 때 빨리 고치기 위한 브랜치

 

 

 

Git 작동 방식 개요

 

Master 브랜치 → Release 브랜치 → Featuer 브랜치

→ 작업 완료 → git add → git commit → git pull → git merge → git push

→ Pull Request 생성 → 코드 검토 → 릴리스 브랜치에 Pull Request 병합

→ 마스터 브랜치에 Pull Request 병합 → 기능 배포

 

 

 

명령어 정리

 

  • Git이 설치되어 있는지 확인
git --version

 

  • 전역적(global)으로 git 사용자 이름 설정
git config --global user.name "your_user_name"

 

  • 전역적으로 git 이메일 설정
git config --global user.email "your_email"

 

  • Git 세부 정보를 올바르게 설정했는지 확인
git config --global user.name

git config --global user.email

 

  • 프로젝트에서 git 초기화하거나,
mkdir project-name
cd project-name
git init

 

또는 원격 저장소를 복제하여 시작

git clone repository_URL

 

  • 작업하려는 프로젝트에 대한 새로운 분기(Branch)를 만들고 현재 작업 디렉터리를 새 분기로 변경하거나,
git checkout -b name_of_your_new_branch

 

또는 기존 지점으로 전환

git checkout name_of_the_branch

 

  • README 파일 생성
echo "# repository_name" >> README.md

 

  • 특정 파일 추가하거나,
git add filename.extension

 

또는 모든 변경 사항 추가

git add .

 

  • Branch의 현재 상태를 확인
git status

 

  • 변경 사항 커밋
git commit -m "commit_message"

 

  • 현재 원격 저장소 보기
git remote show origin

 

  • 지점에 새로운 원격 저장소를 추가
git remote add name_of_your_remote remote_URL

e.g. git remote add origin https://github.com/username/project-name.git

 

  • 원격 URL 변경
git remote set-url origin remote_URL

 

  • 브랜치의 변경 사항을 원격 저장소로 푸시
git push -u name_of_your_remote name_of_your_branch​

 

 

마스터로 푸시

git push origin master​

 

 

특정 원격 지점으로 푸시(원격 지점이 존재하지 않으면 생성)

 
git push -u origin feature_branch_name

 

브랜치를 푸시할 때, -u 또는 --set-upstream 을 사용하면 그 브랜치를 추적하도록 설정되어 추후에는 git push 및 git pull 명령만으로 간단히 사용할 수 있다.

git push --set-upstream origin name_of_your_new_remote

e.g. git push -u origin master​

 

  • 분기별 차이점 보기
git diff name_of_the_source_branch name_of_the_target_branch

 

  • 공식 저장소의 Branch 업데이트
git fetch name_of_your_remote

 

또는

git pull origin name_of_your_new_remote

 

  • 마스터에서 브랜치로 변경 사항을 병합
 
git checkout your_branch_name
git merge master

 

  • 브랜치의 변경 사항을 마스터 브랜치에 병합
git checkout master
git merge your_branch_name

 

 
  • 포크된 저장소에서 업데이트 가져오기
cd the_forked_repo

git remote add upstream forked_repo_URL

git pull upstream master

 

  • 파일 스테이지 해제
git reset HEAD filename.extension

 

  • 모든 Branch 보기
git branch

 

로컬 브랜치의 이름을 바꾸려면

  • 현재 branch에 있는 경우:
git branch -m new_name
  • 다른 branch에 있는 경우:
git branch -m current_name new_branch_name

 

  • 원격 브랜치의 이름을 바꾸려면 현재 브랜치를 삭제하고 새 브랜치를 푸시
git push origin :current_branch_name

git push origin -u new_branch_name

 

  • 선택한 기능을 배포하려면
git cherrypick commit_hash

 

  • Git 로그 보기
git log --summary

git log --graph

 

  • Git 구성 보기
git config --list --show-origin

 

  • Git 및 로컬에서 디렉터리 삭제
git rm -r directory_name

 

  • Git(스테이징 영역)에서 디렉토리를 삭제하지만 로컬 파일 시스템에서는 삭제하지 않음
git rm -r --cached directory_name

 

  • Git 및 로컬에서 파일 삭제
git rm filename.extension

 

  • Git에서 파일을 삭제하지만 로컬은 삭제하지 않음
git rm --cached filename.extension

 

  • 준비된 파일을 강제로 삭제
git rm -f filename.extension

 

  • 로컬 파일 시스템에서 분기 삭제
git branch -d name_of_your_branch

 

  • Github에서 브랜치 삭제
git push origin :name_of_your_branch

 

  • 각 팀 구성원의 기여를 보기
git shortlog -sn --all --no-merges

 

shortlog : git log의 요약을 제공

-s 플래그 : 커밋 설명을 억제하고 커밋 수 요약을 표시

-n 플래그 : 작성자당 커밋 수에 따라 출력을 정렬

--all 플래그 : 모든 분기를 기록

--no-merges : 병합 커밋이 계산되지 않도록 함

 

 

 

  • 참고로, 아래와 같은 명령어를 사용하면 github의 모든 브랜치와 동일한 이름(브랜치 이름에서 "origin/"를 제거한 이름) 의 하위폴더를 생성하고 각각의 내용을 clone해서 폴더에 저장할 수 있게 된다.
git clone --recursive https://github.com/user/repo.git
cd repo
for branch in `git branch -r | grep -v HEAD`; do
    folder_name=$(echo $branch | sed 's/origin\///')
    mkdir -p $folder_name
    git clone --depth 1 --branch $folder_name https://github.com/user/repo.git $folder_name
done