본문 바로가기

SCM/Git

[ Git ] Git 명령어 활용

0. 깃 도움말

# git 명령어 확인
git help

# git 모든 명령어 확인
git help -a

# git 명령어의 설명과 옵션보기
git 명령어 -h

 

1. 깃 버전 확인

git --version

 

2. 깃 OS간 개행 문자 차이로 인한 문제 해결

# 윈도우의 경우
git config --global core.autocrlf true

# 맥의 경우
brew install git
git config --global core.autocrlf input

 

3. 깃 초기 설정

# 현재 설정 확인
git config --global --list

# 현재 설정 에디터에서 확인
git config --global -e

# 기본 사용 에디터 변경
git config --global core.editor "에디터이름"

# 사용자 명 등록
git config --global user.name "사용자명"

# 사용자 이메일 등록
git config --global user.email "사용자이메일"

# 기본 브랜치 명 변경
# 기본 브랜치 명이 master → main 로 바뀌고 있는 추세이기 때문
git config --global init.defaultBranch main

# pull 기본전략 설정
git config pull.rebase false

# git aliase 설정
# e.g. git config --global alias.cam "commit -am"
git config --global alias.단축키 "단축대상"

# push시 로컬과 동일한 브랜치 명에 업로드
git config --global push.default current

 

4. 깃 로컬 저장소 생성

git init

 

5. 깃 로컬 저장소 변경사항 확인

git status

 

6. .gitignore 파일 사용

# 모든 file.txt 제외
file.txt

# 최상위 폴더에 위치한 file.c 제외
/file.txt

# 모든 .txt 확장자 파일 제외
*.txt

# !를 통해 제외 파일 제외(즉 제외 항목이어도 제외하지 않음)
!file01.txt

# dirs 라는 이름의 파일 제외
# dirs 라는 디렉토리와 그 안의 내용 제외
dirs

# dirs 라는 디렉토리와 그 안의 내용 제외
dirs/

# dirs 디렉토리 내부 file02.pdf 파일 제외
dirs/file02.pdf

# dirs 디렉토리 내부 ppt 확장자 파일 제외
dirs/*.ppt

# dirs 폴더 내부에 위치한 폴더 안의 sample.c 파일 제외
dirs/**/sample.c

 

7. 깃 로컬 저장소 커밋 대상 파일 추가

# 단일 대상 파일 추적
git add 파일이름

# 변경 또는 새로 생성된 모든 파일 추적
git add .

# 변경사항을 hunk별로 진행하여 추가
# hunk : 하나의 파일에서 수정사항을 부분적으로 확인
git add -p

 

8. 깃 로컬 저장소 커밋

# 커밋 메시지와 함께 로컬 저장
git commit -m "First Commit"

# 커밋 대상 파일 자동 추가와 함께 로컬 저장
git commit -am "First Commit"

# 변경사항을 확인하고 커밋
git commit -v

# 현재 commit 에 빼먹은 사항이 있을경우 현재의 커밋에 다시 커밋
git commit --amend

# 커밋 메시지를 변경하여 빼먹은 사항과 함께 다시 커밋
git commit --amend -m 'Retry Commit'

 

9. 로컬 저장소 커밋 내역 확인

git log

# 커밋 변경사항 함께 표시
git log -p

# 표시할 커밋 갯수 지정
git log -갯수

# 커밋 통계와 함께 표시
git log --stat

# 커밋 통계 짧게 표시
git log --shortstat

# 커밋 로그 한줄 보기
git log --oneline

# 변경 사항 내 포함된 단어가 있는 커밋 검색
git log -S 단어

# 커밋 메시지 내 포함된 단어가 있는 커밋 검색
git log --grep (검색어)

# 커밋 로그 시각화 하여 표시
# --all : 모든 브랜치 표시
# --graph : 그래프 표현
# --decorate : 브랜치,태그 등 모든 레퍼런스 표시
# --decorate=[ no | short | full ]
git log --all --decorate --oneline --graph

# git 사용자 포멧으로 표시
# https://git-scm.com/book/ko/v2/Git의-기초-커밋-히스토리-조회하기#pretty_format
# 보통 단축키로 등록하여 사용
git log --graph --all --pretty=format:'%C(yellow) %h  %C(reset)%C(blue)%ad%C(reset) : %C(white)%s %C(bold green)-- %an%C(reset) %C(bold red)%d%C(reset)' --date=short

 

10. 과거 저장 내역으로 이동 후 돌아간 시점 이후의 커밋 제거

# 가장 마지막 커밋으로 이동
git reset --hard

# 이동할 커밋을 지정하여 이동
git reset --hard 이동커밋해시

# 한단계 전 커밋으로 이동
git reset --hard HEAD~

# add가 된 상태의 가장 마지막 커밋으로 이동
git reset --soft

 

11. 과거 저장 내역의 정보를 가진 새로운 커밋을 생성하여 이동

# 현재 시점에 수정내역이 있을 경우 충돌이 발생
# 이동 커밋 해시와 marge 를 하여 새로운 커밋을 생성가능
# git revert --continue 를 통해 merge
git revert 이동커밋해시

# 현재 시점에 수정내역이 있을경우 반영하지 않고 
# 이동커밋해시의 내역의 새로운 작업내역(커밋)을 생성
git revert --no-commit 이동커밋해시

 

12. 깃 브랜치 목록 확인

git branch

# 로컬과 원격 브랜치 모두 확인
# git branch --all
git branch -a

 

13. 깃 브랜치 생성

git branch 생성브랜치명

 

14. 깃 브랜치 이동

git switch 브랜치명

# 브랜치 생성과 함께 이동
git switch -c 생성브랜치명

 

15. 깃 브랜치 삭제

git branch -d 브랜치명

# 깃 브랜치에 변경사항이 있을 경우 브랜치 삭제
git branch -D 브랜치명

 

16. 깃 브랜치 이름 변경

git 브랜치 -m 기존브랜치명 새브랜치명

 

17. 깃 로컬 브랜치 원격 브랜치 연동

# 생성 브랜치 원격 추가
git push origin <브랜치 이름> 

# 브랜치 원격 브랜치 연동
git branch --set-upstream-to origin/<브랜치 이름>

 

18. 깃 커밋된 파일의 작성자를 확인

# 파일 부분별 작성자 확인
# GitLens 확장 프로그램 사용하면 UI 상 쉽게 확인 가능
git blame 파일명

# 특정 라인 지정하여 작성자 확인
# e.g. git blame -L 10,13 file.txt
# e.g. git blame -L 10,+3 file.txt
git blame -L 시작줄,(끝줄 또는 +줄수) 파일명

 

19. merge를 이용하여 깃 브랜치 병합

# 병합대상브랜치로 이동 후 병합브랜치 병합
git merge 병합브랜치명

# 병합브랜치가 병합대상브랜치 이후에 작성되고
# 병합대상브랜치가 병합브랜치 이후 작성된적이 없다면
# 커밋 위치가 단순 이동으로 생각되어 기록이 남는 3-way merge 방식이아닌
# Fastforward 방식으로 동작한다.
# 병합기록을 남게 하기 위해서 --no-ff 옵션을 주어 강제적으로
# 3-way merge 방식으로 동작하도록 할 수 있다.
git merge --no-ff 병합브랜치명

 

20. rebase를 이용하여 깃 브랜치 병합

# 병합브랜치로 이동 후 병합대상브랜치에 병합
# 병합브랜치는 뒤쳐지는 상황
git rebase 병합대상브랜치명

# 병합브랜치 이동 후 병합대상브랜치 병합(따라잡기)
git merge 병합브랜치

 

21. 병합 중 충돌 발생시 병합 중단

# merge 병합 충돌시 병합 중단
git merge --abort

# rebase 병합 충돌시 병합 중단
git rebase --abort

 

22. 병합 중 충돌 발생시 충돌 부분 수정하여 병합

# rebase 병합시 충돌 부분 수정 후 git add .
git rebase --continue

# merge나 rebase 충돌 부분 수정 후
git merge 병합브랜치명

 

23. 깃 원격 저장소 연결

# 원격저장소 이름은 보통 origin을 사용
git remote add 원격저장소이름 원격저장소주소

 

24. 깃 로컬저장소 커밋 내역 원격저장소 업로드

# 원격저장소이름 : origin, 로컬저장소이름 : 브랜치명
git push -u 원격저장소이름 로컬저장소이름

 

25. 깃 원격저장소 목록 확인

git remote

# 상세 확인
git remote -v

 

26. 깃 원격저장소 연결 삭제

# 원격저장소명 보통 origin
git remote remove 원격저장소명

 

27. 원격저장소 프로젝트 다운로드

git clone 원격저장소명

# git 프로젝트 저장 폴더 지정
# e.g. git clone 원격저장소명 ./
git clone 원격저장소명 저장폴더

 

28. 깃 업로드 대상 원격저장소 지정

# 기본적으로 최초 remote 추가 시 연결되어 있음
# git push -u origin main
git push -u 원격저장소명 로컬저장소명

 

29. 원격 저장소 커밋 내용 업로드

# 원격 저장소가 업데이트 된 상태로 로컬저장소 업로드 불가
# 원격 저장소 내역을 다운로드 받아야 한다.
git push

# 로컬 내역 강제 업로드
git push --force

 

30. 원격 저장소 커밋 내역 다운로드

git pull

# 현재 로컬 저장소 내역과 merge 하여 다운로드
git pull --no-rebase

# 현재 로컬 저장소 내역과 rebase 하여 다운로드
# 현재 원격저장소 내역을 내 현재 커밋 내역 이전에 커밋하여 다운로드
git pull --rebase

 

31. 원격 저장소 변경내역 정보만 다운로드

git fetch

 

32. 원격 저장소 브랜치를 로컬 브랜치로 생성후 이동

git switch -t 원격브랜치명

 

33. 원격 저장소 브랜치 삭제

git push 원격저장소명 --delete 원격브랜치명

 

34. 깃 커밋 항목 간 차이점 비교

# 워킹 디렉토리의 변경사항 확인
git diff

# 변경 사항 있는 파일 명만 확인
git diff --name-only

# 스테이징된 파일의 변경사항만 확인
git diff --staged

# 커밋 간 차이 확인
git diff 비교할커밋1 비교할커밋2

# 브랜치간의 차이 확인
git diff 브랜치1 브랜치2

 

34. 깃 현재 작업들 치워두기

# 현 작업들 치워두기
git stash

# 현 작업 메시지와 함께 치워두기
git stash -m 'Add Stash3'

# 현 작업 hunk 하여 치워두기
git stash -p

# 치워둔 작업 리스트 확인
git stash list

# 치워둔 작업 번호 지정 가져오기
git stash apply stash@{번호}

# 치워둔 작업 번호 지정 삭제
git stash drop stash@{번호}

# 치워둔 작업 번호 지정 가져온 후 삭제
git stash pop stash@{번호}

# 치워둔 마지막 항목 가져오기
git stash apply

# 치워둔 마지막 항목 삭제
git stash drop

# 치워둔 마지막 항목 적용 및 삭제
git stash pop

# 치워둔 작업 목록 비우기
git stash clear

# 치워둔 작업 목록 브랜치 새로 생성하여 적용
git stash branch 브랜치명

 

35. 과거의 커밋들을 수정,삭제,병합,분할

명령어 설명
p, pick 커밋 그대로 두기
r, reword 커밋 메시지 변경
e, edit 수정을 위해 정지(분할)
d, drop 커밋 삭제
s, squash 이전 커밋에 합치기
git rebase -i 커밋내역수정대상이전커밋

1. 이름변경
# pick을 r로 변경하여 이름변경

2. 병합
# 두개의 커밋을 병합시 병합 커밋중 최신 커밋을 이전 커밋으로 합친는 개념으로
# 최신 커밋의 pick을 s로 변경하여 병합

3. 삭제
# pick을 d로 변경하여 삭제

# 4. 분할 작업
# pick을 e로 변경하여 분할 작업 시작
# 분학 작업 mixed로 분할 작업 대상이 이전 커밋으로 이동 및 현재 커밋 제거
git reset --mixed HEAD~

git add xxx

git commit -m "분할1"

git add .

git commit -m "분할2"

# 분할 된 내역 모두 추가 후 컨티뉴로 분할 종료
git rebase --continue

 

36. 깃 추가하지 않은 파일 삭제

# clean 시 삭제될 파일 목록 확인
git clean -n

# 대화형 모드로 추가하지 않은 파일 삭제
git clean -i

# 폴더 포함 삭제
git clean -d

# 대화형 모드 없이 강제 삭제
git clean -f

# gitignore에 등록된 파일도 삭제
git clean -x

 

37. 깃 변경사항 되돌리기

# 지정한 파일 커밋 직후의 파일로 되돌리기
git restore 파일명

# 지정한 파일 add 취소하기
git restore --staged 파일명

# 지정한 파일 커밋해시 또는 헤드로 지정한 해시 커밋 당시의 파일로 되돌리기
git restore --source=(헤드 또는 커밋 해시) 파일명

 

38. 깃 reset 한 내용 되돌리기

# 현재까지 git을 통한 작업내용 확인
git reflog

# 작업내용해쉬로 작업내용 되돌리기
git reset --hard 작업내용해쉬

 

39. 깃 태그 활용

# lightweight : 간단한 태그
# annotated : 작성자 정보, 날짜, 메시지, GPG 서명 포함 가능 태그

# 마지막 커밋 태그 추가(lightweight)
# e.g. git tag v2.0.0
git tag 태그버전

# 태그 확인
git tag

# 태그버전의 커밋 상세확인
git show 태그버전

# 태그 삭제
git tag -d 태그버전

# 마지막 커밋 태그 추가(annotated)
git tag -a 태그버전

# 태그메시지 지정하여 태그 추가
git tag 태그버전 -m '태그메시지'

# 원하는 커밋에 태그 추가
git tag 태그버전 커밋해시 -m '태그메시지'

# 패틴 지정하여 태그 확인
# e.g. git tag -l 'v1.*'
git tag 태그버전패턴

# 원하는 태그버전으로 체크아웃
git checkout 태그버전

# 지정한 태그버전 원격 업로드
git push 원격저장소명 태그버전

# 지정 태그 원격 삭제
git push --delete 원격저장소명 태그버전

# 로컬 모든 태그 원격 업로드
git push --tags

 

40. 다른 브랜치의 원하는 커밋을 현재 브랜치에 가져오기

git cherry-pick 다른브랜치커밋해시

 

41. 다른 브랜치에서 파생된 브랜치 가져오기

# 대상브랜치 이동
git rebase --onto 이어붙일브랜치 대상브랜치포함브랜치 대상브랜치

# 이어붙일 경우 대상브랜치가 이어붙일 브랜치에 붙고 
# 이어붙일브랜치는 대상브랜치보다
# 앞에 위치하게된다.
git switch 이어붙일브랜치

# merge 하여 fastforward로 따라잡도록 함
git merge 대상브랜치

 

42. 다른 브랜치의 내역들 하나로 묶어 브랜치에 추가하기

git merge --squash 대상브랜치

 

43. 깃 오류가 발생한 시점 찾아내기

# 2진탐색시작
git bisect start

# 현재 커밋에서 소스상 오류가 발생하고 있음을 표시
git bisect bad

# 의심 지점 이동
git checkout 에러발생의심지점해시

# 의심지점에서 오류발생 안할시 good설정
# 아래 설정을 하면 맨처음 시작한 해시와
# 의심지점의 해시의 가운데 커밋으로 자동이동
# 2진탐색을 수행
git bisect good

# 2진탐색으로 오류 발생지점을 찾을시 이진 탐색 종료
git bisect reset

 

44. 깃 프로젝트 내에 프로젝트 배치하기

# 현재 깃 프로젝트에 서브 프로젝트 추가
# gitmodules 생성 확인
git submodule add 서프프로젝트저장소주소 (하위폴더명, 없을 시 생략)

# 메인 프로젝트를 clone 해서 받아왔을 경우
# 서브 프로젝트가 처음에 받아와 있지 않음
# 받아오려면 init 으로 서브 프로젝트를 받아오겠다 선언
git submodule init 서브프로젝트이름

# 서브프로젝트 업데이트
git submodule update

# 서브프로젝트 원격 변경사항 업데이트
git submodule update --remote

# 서브프로젝트내 서브프로젝트 있을시 전부 업데이트
git submodule update --remote --recursive

'SCM > Git' 카테고리의 다른 글

[ Git ] Git 컨벤션  (0) 2022.03.23
[ Git ] Git 자격증명 사용  (0) 2022.03.21