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 로그 역순으로 표시
git log --reverse
# 표시할 커밋 갯수 지정
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
'Source Control Management > Git' 카테고리의 다른 글
[ Git ] Git 컨벤션 (0) | 2022.03.23 |
---|---|
[ Git ] Git 자격증명 사용 (0) | 2022.03.21 |