[git] git 기본 사용법

chaeyeon·2023년 1월 18일
0
post-thumbnail

기본 명령어


# git 저장소 생성 (.git 디렉토리 생성)
git init

# repo_url의 저장소를 원격 저장소로 설정
git remote add origin [repo_url]

# git repository 로컬에 내려받기
git clone [repo_url]

# repository 상태 표시
git status

# 스테이지에 선택적 파일 추가 (index.html만 올리기)
git add index.html

# 스테이지에 전체 파일 추가
git add *
git add .
git add -A

# git add + git commit 동시에
git commit -am "commit_message"

# 스테이지 영역의 파일을 repository 변경사항에 반영
# -m : message
git commit -m "commit_message"

# 커밋 메시지 여러줄 작성
git commit -m "message 1
message 2
message 3
...
message last"

# 마지막 커밋 메시지 수정
git commit --amend -m "edit commit_message"

# branch 목록보기
git branch

# 새로운 branch 생성하기
git branch [branch]

# 선택한 branch로 변경하기
git checkout [branch]

# 새로운 branch 생성후 전환하기
git checkout -b [branch]

# 원격 저장소의 branch를 새로 만든 branch로 체크아웃
git checkout -b [branch] origin/[branch]

# 선택한 branch 삭제하기
git branch -d [branch]

# 로컬 branch와 원격 branch 모두 표시
git branch -a

# 현재 브랜치에 push
git push

# 원격 저장소의 master 브랜치에 push
git push origin master

# git push의 기본값을 origin의 master 브랜치로 지정
# -u : upstream (업스트림을 설정하여 저장소를 중앙 저장소로 연결하기 위함)
git push -u origin master

# 현재 브랜치의 변경사항을 로컬에 업데이트
git pull

# origin remote의 변경사항을 로컬에 업데이트
git pull origin master

# Log 보기
git log

# 커밋에서 Log 및 변경된 내용 확인
git log -p

# 브랜치를 그래프로 확인
git log --graph

# 가장 최근에 수행한 작업부터 repository에서 진행된 모든 로그 볼 수 있음
git reflog

# 현재 브랜치의 마지막 커밋과 차이점 비교
git diff

# 최신 commit과의 차이점 비교
# HEAD : 현재 브랜치에서 가장 최신의 커밋을 나타내는 키워드
git diff HEAD

# 특정 커밋과 특정 파일의 차이점 비교
git diff [commit_ID] -- [파일 경로]

# 현재 브랜치와 다른 branch로부터 변경사항 합치기
git merge [branch]

# 현재 브랜치에서 [branch]브랜치를 합침
git merge --no--ff [branch]

# 이전의 커밋 해시버전으로 복원
# --hard : 돌아가려는 이력이후의 모든 내용 및 이력을 삭제
# --soft : 돌아가려 했던 이력으로 돌아가지만, 이후의 변경 이력은 모두 삭제되지만 내용이 지워지지 않고 인덱스 or 스테이지는 남아있음
# --mixed : 돌아가려 했던 이력으로 돌아가고 이후의 변경 이력은 모두 삭제되지만 변경 내용은 지워지지 않는다. 인덱스는 초기화됨
git reset 옵션 [commig_hash]

# 지정한 커밋 해시버전을 최상단 커밋으로 올리면서 돌아가기 (revert 히스토리가 남음)
# reset과 다른점은 커밋을 삭제하는 것이 아닌 커밋을 추가함
git revert [commig_hash]

# 작업도중 다른 branch로 체크아웃을 해야 하는데 커밋할 수 없을때 임시로 branch의 작업내용을 보존하기 위해 사용
git stash

# 임시 작업내용 복원
git stash apply

브랜치 생성하여 작업하고 공통 브랜치에서 변경사항 다운받기

# 공통 브랜치 : main 일때

# 새로운 branch 생성하고 체크아웃
git checkout -b [branch]
git status

# 새로운 branch에 변경사항 commit하기
git add .
git commit -m "commit_message"
git push origin [branch]

# main branch로 이동하여 내 branch의 변경사항을 main에 병합하기
git checkout main
git pull
git merge [branch]

# 내 branch로 이동하여 수정사항 commit하기
git checkout [branch]
git add .
git commit -m "commit_message"

# 원격 저장소의 main branch에 push하기
git push -u origin main
#이후
git push 가능

좋은 커밋 메시지를 작성하는 7가지 규칙

  1. 주제와 본문을 빈줄로 분리하기
  2. 주제는 50자로 제한하기
  3. 주제의 첫 글자는 대문자로 쓰기
  4. 주제에 마침표를 넣지 않기
  5. 주제는 명령으로 작성하기
  6. 본문은 72자에 줄바꿈하기
  7. how 보단 what과 why를 설명하기

커밋 메시지의 구조

$ <type>: <subject>   -- 헤더 (주제)
<blank>                        -- 빈줄
<body>                         -- 본문(생략 가능)
<blank>                        -- 빈줄
<footer>                       -- 바닥글/꼬리말

subject의 type은 커밋의 성격을 나타낸다.

type명 설명
feat 새로운 기능
fix 버그 수정
docs 문서 수정
style 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우
design css 등 사용자 UI 디자인 변경
test 테스트 코드, 리펙토링 테스트 코드 추가
refactor 프로덕션 코드 리펙토링
build 빌드 관련 파일 수정사항
chore 빌드 테스트 업데이트, 패키지 매니저를 설정하는 경우
ci CI관련 설정 수정
rename 파일/ 폴더명을 수정하거나 옮기기만 하는 경우
remove 파일을 삭제만 하는 경우
!BREAKING CHANGE 커다란 API 변경
!HOTFIX 치명적인 버그를 고치는 경우

바닥글/꼬리말

  • 꼬리말은 "type: #이슈 번호" 형식
  • 이슈 번호는 쉼표(,)로 구분
type명 설명
Fixes 이슈 수정중 (미해결)
Resolves 이슈 수정완료
Ref 참고할 이슈가 있을 때
Related to 해당 커밋에 관련된 이슈번호 (미해결)

커밋 구조를 적용한 예시

Feat: "쪽지알림 On/Off 기능 추가" (#123)

쪽지알림을 On/Off 할 수 있도록 기능을 추가함

Resolves : #123, #456
Related to: #100

profile
4년차 퍼블리셔에서 프론트엔드 개발자로 이직 성공한 신입 개발자 입니다-*

0개의 댓글