Git 명령어 (config, branch, merge, checkout, stash, rebase..)

김민아·2022년 10월 21일
0

Git

git 설정하기

로컬 레포지토리와 연결할 유저 정보를 설정한다.

# 버전 히스토리를 식별할 때 사용할 이름을 설정
$ git config --global user.name "[firstname lastname]"
# 각 기록과 연결할 이메일 주소를 설정
$ git config --global user.email “[valid-email]

git 초기화

레포지토리를 초가화하거나 존재하는 레포지토리를 클론할 수 있다.

# 현재 디렉토리를 기준으로 Git 저장소가 생성
$ git init

git 복제하기

# URL을 통해 리모트 레포지토리를 로컬 레포지토리에 복제
$ git clone [url]

git 스테이징

변경된 파일을 쉬운 예시로 무대에 올리는 것과 같다.

# 다음 커밋을 위해 현재 디렉토리에서 수정된 파일을 확인
$ git status
# 다음 커밋을 위해 파일을 추가 (stage)
$ git add [file]
# 추가한 파일을 언스테이징. 변경 사항은 유지된다
$ git reset [file]
# 스테이지되지 않은 변경 사항을 보여준다
$ git diff
# 스테이지했지만 커밋하지 않은 변경 사항을 보여준다.
$ git diff --staged

git 커밋하기

무대에 올린 (변경된 파일들을) 스냅샷을 생성한다.

# 스테이지된 컨텐츠를 메시지와 함께 커밋
$ git commit -m “[descriptive message]

branch 생성 및 전환

이 때, 새로운 브랜치로 Git이 바라보는 곳, HEAD를 변경하는 작업을 switch라고 부른다. 브랜치를 생성할 때는 생성(create)의 의미로 -c 를 붙여줘야 하고, 기존에 있는 브랜치 간의 이동은 붙이지 않아도 된다.

# 브랜치 목록을 보여준다. '*'표시는 현재 작업중인 브랜치
$ git branch
# 브랜치 만들고 동시에 checkout
git switch -c [new-branch-name]

# checkout이라는 명령어로도 위와 동일 
git checkout -b [new-branch-name]

# 기존에 있던 main 브랜치간의 전환은 이래와 같이 
git switch main
git checkout main

branch 합치기

기능 개발이 끝나면 브랜치를 main 브랜치와 합칠 수 있다.

# 기능 개발이 진행
git commit -m "기능1의 세부 기능1"
git commit -m "기능1의 세부 기능2"
git commit -m "기능1 개발 완료"

# 머지할 main 브랜치로 전환
git switch main

# main 브랜치로 feat/todo 브랜치를 병합
git merge feat/todo

실제 개발에서는 로컬에서 merge하기 보다는 pull request기능을 이용하는 경우가 많으니
다음과 같이 push한 후에 PR 요청을 한다.

# 기능 개발이 진행
git commit -m "기능1의 세부 기능1"
git commit -m "기능1의 세부 기능2"
git commit -m "기능1 개발 완료"

# Github 원격 리포지토리로 푸시
git push origin feat/todo

# Github에서 Pull Request 진행
# 현재 브랜치의 모든 커밋 히스토리
$ git log

branch 삭제

머지된 feature 브랜치는 이미 dev 브랜치에 기록이 남아있기 때문에 굳이 남겨둘 이유가 없어 삭제를 권장한다. 원격 리포지토리에서 PR이 성공적으로 마무리되면, 아래 브랜치를 삭제하는 버튼을 눌러 쉽게 삭제할 수 있다.

로컬 리포지토리에서 브랜치 삭제는 git branch -d [브랜치명] 으로 할 수 있다.

git branch -d [branch-name]

Git은 원활한 버전 관리를 위해서, 브랜치가 합쳐지지 않으면 삭제하지 못하도록 설정이 되어있다. 하지만 종종 다 만들지 못한 기능의 기록을 삭제하고 싶을 때 -D 옵션을 쓰면 삭제할 수 있다.

git branch -D [branch-name]

비교 및 검사

# 브랜치B에 없는 브랜치A의 모든 커밋 히스토리를 보여준다
$ git log branchB..branchA
# 해당 파일의 변경 사항이 담긴 모든 커밋을 표시 (파일 이름 변경도 표시)
$ git log --follow [file]
# 브랜치A에 있지만 브랜치B에 없는 것의 변경 내용(diff)을 표시 (branch간 상태 비교)
$ git diff branchB...branchA

공유 및 업데이트

특정 레포지토리의 업데이트 사항을 검색하여 로컬 레포지토리를 업데이트할 수 있다.

# url을 통해 특정 리모트 레포지토리를 별칭으로 추가
$ git remote add [alias] [url]
# 별칭으로 추가한 리모트 레포지토리에 있는 모든 브랜치 및 데이터를 로컬로 가져온다
$ git fetch [alias]
# 리모트 브랜치를 현재 작업중인 브랜치와 병합하여 최신 상태로 만든다
$ git merge [alias]/[branch]
# 로컬 브랜치의 커밋을 리모트 브랜치로 전송
$ git push [alias] [branch]
# 리모트 레포지토리의 정보를 가져와 자동으로 로컬 브랜치에 병합
$ git pull

히스토리 수정

브랜치 또는 커밋을 수정하거나 커밋 히스토리를 지울 수 있다.

# 특정 브랜치의 분기 이후 커밋을 현재 작업중인 브랜치에 반영.
$ git rebase [branch]
# 득정 커밋 전으로 돌아가며 스테이지된 변경 사항을 모두 지운다
$ git reset --hard [commitish]

임시 저장

브랜치를 전환하기 위해 변경되었거나 추적중인 파일을 임시로 저장할 수 있다.

# 수정하거나 스테이지된 변경사항을 스택에 임시 저장하고 현재 작업 내역에서 지운다
$ git stash
# 스택에 임시 저장된 변경사항의 목록을 보여준다
$ git stash list
# 스택에 임시 저장된 변경사항을 다시 현재 작업 내역에 적용
$ git stash apply
# 스택에 임시 저장된 변경사항을 다시 현재 작업 내역에 적용하고 스택에서 삭제
$ git stash pop
# 스택에 임시 저장된 변경사항을 삭제
$ git stash drop

0개의 댓글