Git 사용법 정리 [git]

SnowCat·2023년 9월 11일
0

설치 방법

  • 윈도우의 경우 git 사이트에서 직접 설치
    이 때 기본에디터는 vscode로, 기본 브랜치명을 main으로 해두는 것을 권장
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  • Homebrew설치이후 brew에서 git 설치
brew install git
  • 이후 아래 커맨드 입력
# 기본 브랜치명을 main으로 설정
git config --global init.defaultBranch main

# 기본 git 에디터를 vim대신 vscode로 설정
git config --global core.editor "code --wait"
  • 설정 이후 윈도우, 맥 모두 git 유저정보 설정 필요
git config --global user.email "이메일주소@naver.com"
git config --global user.name "몰루"

파일 저장하기

  • git 연동을 시키고 싶은 경우 git init 사용
git init
  • 작업을 하면서 파일을 staging area에 올리고 싶으면 git add 사용
# git add code1.txt
# git add code1.txt code2.txt
# 모든 파일을 업로드 하고 싶으면 .을 사용해 git add .
git add 파일명
  • 스테이징된 파일들의 상태를 확인하고 싶으면 git status 사용
git status
  • 파일을 커밋해 저장하고 싶다면 git commit 사용
git commit -m '메세지'
  • 스테이징된 파일을 저장하지 않고 staging area에서 내리고 싶으면 git restore 사용
git restore --staged 파일명

커밋 버전간의 차이점 확인하기

  • 커밋끼리 어떤 차이가 있나 확인하고 싶으면 git difftool 명령어 사용
# 현재 버전과의 차이 확인
git difftoll 커밋이름

# 다른 버전끼리의 차이 확인
git difftoll 커밋이름1 커밋이름2
  • 커밋 로그 기록과 이름을 확인하고 싶으면 git log 사용
git log --all --oneline
  • git diff 명령어도 같은 역할을 하지만, git difftool이 가독성이 더 좋음
  • vim 에디터를 사용하고 싶지 않다면 vscode에서 git graph와 같은 확장프로그램 사용을 권장

복제본을 만들어 작업하기

  • 원본 파일을 유지하면서 파일을 수정하고 싶으면 브랜치를 생성해 작업하면 됨
git branch 브랜치이름 

# 브랜치 이동
git switch 브랜치이름 
  • 다른 브랜치에서 작업한 파일을 원래 브랜치에 업로드하고 싶으면 git merge 명령어 사용
# 원래 브랜치로 이동
git switch 업로드할브랜치명

git merge 파일이있는브랜치명

만약 충돌이 일어날 경우 충돌난 파일을 따로 수정하고 커밋을 해야 merge가 완료됨에 주의

  • merge가 완료되어 브랜치를 삭제하고 싶으면 git branch -d 명령어 사용
# merge가 완료된 경우
git branch -d 브랜치이름
# 아직 merge되지 않은 경우
git branch -D 브랜치이름

merge시 커밋 기록을 정리하기

  • 브랜치를 merge할때는 git merge를 사용하고, 충돌난 부분만 커밋을 하는 방법이 가장 일반적임
  • 이 방식을 3-way merge라고 하며, 브랜치의 커밋 기록이 merge된 브랜치에도 남아 커밋 기록이 복잡해질 수 있다는 문제를 가지고 있음
  • 만약 merge하려는 브랜치가 분기 이후 새로운 커밋이 없다면 자동으로 fast-foward merge 방식을 통해 merge를 진행함
    • 병합하려는 브랜치를 원래 브랜치에 합치는 것이 아니라 병합하려는 브랜치의 이름을 원래 브랜치의 이름으로 바꾸는 방법
    • 기준이 되는 브랜치에 신규 커밋이 없으면 자동으로 발동되며, 원하지 않는 경우 아래의 커맨드를 입력하면 됨
    git merge --no-ff 브랜치명
  • 이미 커밋이 생긴 브랜치에 fast-foward merge를 하고자 하면 git rebase를 사용할 수 있음
  • git rebase 명령어를 사용하면 브랜치의 시작점을 가장 최근 commit으로 이동할 수 있으며, 이를 통해 강제로 fast-foward merge를 진행할 수 있음
  • branch끼리 차이가 많은 경우 충돌을 전부 해결해야 할수도 있음에 주의
git switch 새로운브랜치
git rebase main

git switch main
git merge 새로운브랜치
  • 3-way merge 방식을 유지하면서 커밋 기록만 안 남기고 싶은 경우에는 squash를 통해 merge를 할 수 있음
  • merge 뒤에 squash 옵션을 추가하면 브랜치에서 생성된 커밋들을 하나로 통합해 main 브랜치에 생성해 merge하게 됨
git switch 원래브랜치
git merge --squash 브랜치명
git commit -m '메세지'

파일을 복구하기

  • 파일 하나를 복구하고 싶을 때에는 git restore로 복구할 수 있음
# 최근 커밋을 복구할 경우
git restore 파일명

# 특정 시점의 커밋으로 복구할 경우
git restore --source 커밋아이디 파일명

# 여러개의 파일을 복구할 경우
git restore 파일명1 파일명2
  • 작업 중 특정 커밋이 문제를 일으켜 취소하고 싶을 때는 git revert를 사용 가능
  • 만약 merge된 커밋을 revert하면 merge가 취소됨에 주의
git revert 커밋아이디

# 최근 커밋만 취소할 경우
git revert HEAD

# 여러개의 커밋을 취소할 경우
git revert 커밋아이디1 커밋아이디2
  • 커밋 기록까지도 삭제하고 싶은 경우에는 git reset를 사용
    • 협업시 문제가 생길 수 있기 때문에 웬만해서는 사용하지 않는 것을 권장
# 커밋 기록과 수정된 파일 상태까지 삭제하고 싶은 경우
git reset --hard 커밋아이디

# 수정된 파일을 스테이징 된 상태로 두고 싶은 경우
git reset --soft 커밋아이디

# 수정된 파일을 유지하되 스테이징되지는 않도록 하고 싶은 경우
git reset --mixed 커밋아이디

github에 연동해두기

  • github 리포지토리에 로컬 파일을 업로드 하고 싶으면 git push 사용
    • github사용시 기본 브랜치 이름은 main이어야 함에 주의
# 처음 업로드 하는 경우 (-u 옵션을 통해 주소를 기억하도록 함)
git push -u 원격리포지토리주소 브랜치명

# 이후 업로드
git push
  • 브랜치를 자주 변경하는 등의 문제로 주소를 자주 입력해야 하는경우, git remote 명령어를 통해 주소를 변수화 할 수 있음
git remote add 변수명 저장소주소

# 변수명 확인
git remote -v

# 이후 업로드할 경우
git push -u 변수명 브랜치명
  • github에서 파일을 받아오고 싶은 경우 git clone 명령어 사용
git clone 저장소주소
  • 원격저장소를 로컬 저장소와 동기화하기 위해서는 git pull 사용
git pull 원격저장소주소
  • git push와 마찬가지로 변수명 등록을 하면 변수명으로도 가능하고, -u 옵션을 사용한 뒤에 주소를 붙이지 않으면 직전 pull한 원격저장소의 정보를 가져옴
  • git pull 명령어는 git fetch와 git merge를 합친 명령어이며, 이로인해 pull 시도시 충돌이 일어날 수도 있음

브랜치를 관리하는 방법

  • 브랜치를 관리하는 방법론으로는 여러 브랜치를 통해 메인 브랜치의 안정성을 중시하는 git flow, 하나의 브랜치를 제대로 관리하는 Trunk-based 개발전략이 있음

Git Flow

  • git flow 개발전략에서는 여러 브랜치들을 역할별로 생성해 main 브랜치의 수정을 최소화하는 개발상식임
    • Main(Master): 유저들에게 실제로 배포할 코드가 있는 브랜치
    • Release: 유저들에게 출시하기 전 테스트를 진행하는 브랜치
    • Develop: 실제 기능 추가와 같은 개발을 진행하는 브랜치
    • Feature: 개발자가 각각 작업을 수행하는 브랜치로 feature/기능이름 식으로 작명함
    • Hotfix: main브랜치에 문제가 생겼을 때 바로 수정이 필요한 경우 사용하는 브랜치
  • 유저들이 사용하는 코드가 안정적이게 된다는 장점이 있지만, CI/CD에서는 적합하지 않음

Trunk-based

  • 하나의 브랜치만을 가지고 그곳에 모든 커밋을 올리는 개발 전략
  • 코드 관리가 편하고 CI/CD시에 유리하지만, 코드의 안정성 확보를 위해 테스트를 자주하고 자동화하며, 코드리뷰를 자주 해주어야 함
  • github flow도 이와 비슷한 개발전략을 가지고 있음

코드를 잠깐 보관해주기

  • 파일 작업중 커밋없이 코드만 잠깐 보관해두고 싶을 때에는 git stash 사용
git stash

# 메모가 필요한 경우
git stash save "메시지"

# 일부 코드만 스태싱할 경우
git stash -p
  • stash한 목록을 보고 싶은 경우 git stash list 명령어 사용
git stash list
  • stash된 코드를 가져오려면 pop을 사용하며, 가장 최근에 스태싱된 코드부터 다시 가져옴
git stash pop
  • 스태싱된 코드를 삭제할 경우 git stash drop 또는 git stash clear 명령어를 사용
# 일부 스태싱만 삭제
git stash drop 삭제할id
git stash claer
profile
냐아아아아아아아아앙

0개의 댓글