1. git clean 명령어
- Git에서 추적(동록)하지 않는 파일들 삭제
옵션 | 설명 |
---|---|
-n | 삭제될 파일들 보여주기 |
-i | 인터렉티브 모드 시작 |
-d | 폴더 포함 |
-f | 강제로 바로 지워버리기 |
-x | ⚠️ .gitignore 에 등록된 파일들도 삭제 |
- 위의 옵션들을 조합하여 사용
※ 💡 흔히 쓰이는 조합: git clean -df
2. git restore 명령어
특정 파일을 지정된 상태로 복구
파일 여러 개를 수정하고 아래 명령어들 사용해보기
git restore (파일명)
- 워킹 디렉토리의 특정 파일 복구
- 파일명 자리에
.
: 모든 파일 복구
변경상태를 스테이지에서 워킹 디렉토리로 돌려놓기
git restore --staged (파일명)
파일을 특정 커밋의 상태로 되돌리기
git restore --source=(헤드 또는 커밋 해시) 파일명
3. git reflog 명령어
reflog
는 프로젝트가 위치한 커밋이 바뀔 때마다 기록되는 내역을 보여주고
이를 사용하여 reset
하기 이전 시점으로 프로젝트를 복구할 수 있습니다.
git reflog
4. Fastforward 와 3-way-merge
- git hub 에서도 마찬가지로 적용되는 개념이다
rebase
방식을 사용할때Fastforward
를 사용하게된다
Fastforward
위와 같이 B 브랜치의 히스토리는 A 브랜치의 히스토리를 포함하는 즉 충돌이 나지않는 상황에서 두 브랜치를 병합했을때 A 브랜치의 헤드를 B 브랜치 마지막 분기점까지 옮기는 것을 의미한다.
git merge --ff
# git merge 를 사용하더라도 Fastforward 가 가능하다면 git merge --ff 처럼 실행됨
git merge
3-way-merge
# Fastforward 가 가능하더라도 아래의 명령어를 사용시 새로운 커밋을 만들어서 처리함
git merge --no-ff
양 브랜치의 내용이 다르고 병합했을때 충돌이 날 수 있는 상황에서 변경내용을 합쳐 새로운 커밋을 만드는 방식을 의미
5. git log
기본 명령어
# 각 커밋마다의 변경사항 함께 보기
git log -p
# 최근 n개 커밋만 보기
git log -(갯수)
# 통계와 함께 보기
# 더 간략히: `--shortstat`
git log --stat
# 한 줄로 보기
# `--pretty=oneline --abbrev-commit`의 줄임
git log --oneline
# 변경사항 내 단어 검색
git log -S (검색어)
# 커밋 메시지로 검색
git log --grep (검색어)
# 자주 사용되는 그래프 로그 보기
git log --all --decorate --oneline --graph
※ git log 조회 범위 제한 옵션 : 공식문서
그래프 로그 옵션
--all
: 모든 브랜치 보기--graph
: 그래프 표현--decorate
: 브랜치, 태그 등 모든 레퍼런스 표시--decorate=no
--decorate=short
: 기본--decorate=full
포맷된 로그 보기
※ 예시
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
6. git diff
기본 명령어
# 워킹 디렉토리의 변경사항 확인
git diff
# 파일명만 확인
git diff --name-only
# 스테이지의 확인
# `--cached`와 같음
git diff --staged
# 커밋간의 차이 확인
# 현재 커밋과 비교하려면 이전 커밋만 명시
# 커밋 해시 및 HEAD 로도 컨트롤 가능
git diff (커밋1) (커밋2)
# 브랜치간의 차이 확인
git diff (브랜치1) (브랜치2)
7. git blame
각 라인의 작성자를 확인합니다.
파일의 부분별로 작성자 확인하기
git blame (파일명)
특정 부분 지정해서 작성자 확인하기
git blame -L (시작줄) (끝줄, 또는 +줄수) (파일명)
※ VS Code 의 GitLens 같은 확장프로그램 활용도 고려해보자
8. git bisect
이진 탐색 알고리즘으로 문제의 발생 시점을 찾아냅니다.
# 의심 지점으로 이동
git checkout (해당 커밋 해시)
# 이진 탐색 시작
git bisect start
# 오류발생 지점임을 표시
git bisect bad
# 오류 발생 않을 시 양호함 표시
git bisect good
# ♻️ 원인을 찾을 때까지 반복
git bisect good/bad
# 이진 탐색 종료
git bisect reset
9. Git Hooks
Git상의 이벤트마다 자동으로 실행될 스크립트를 지정합니다.
📁 Git Hooks 폴더 보기
프로젝트 폴더 내 .git
> hooks
폴더 확인
- 파일 끝에
.sample
을 없애면 훅 실행파일이 됨
gitmoji-cli로 활용예 보기
1. gitmoji-cli 설치
윈도우
- 먼저 Node.js 설치
- 터미널에서 설치:
npm i -g gitmoji-cli
맥
brew
로 설치 :brew install gitmoji
2. 프로젝트의 훅에 적용
프로젝트 폴더에서 아래 명령어 실행
gitmoji -i
hooks
폴더에 추가된 파일 확인하기- 프로젝트에 수정 뒤
git add .
,git commit
하여 진행 - 커밋 추가 뒤 push하여 GitHub에서 확인
gitmoji-cli 훅을 해제하려면
hooks
폴더에서 prepare-commit-msg
파일을 삭제해주면 됩니다.
10. git submodules
- 프로젝트 폴더 안에 또 다른 프로젝트가 포함될 때 사용
- 여러 프로젝트에 사용되는 공통모듈일 때 유용
사용 예
1. 두 개의 프로젝트 생성
main-project
,submodule
- 두 프로젝트 모두 GitHub에 각각 레포지토리 를 생성
2. main-project
에 서브모듈로 submodule
프로젝트 추가
- main-project 에서 명령어 실행
git submodule add (submodule의 GitHub 레포지토리 주소) (하위폴더명, 없을 시 생략)
프로젝트 폴더 내
submodule
(프로젝트) 폴더와.gitmodules
(하위 프로젝트 관련 내용) 파일 확인submodule
의 변경사항(Working directory)은main-project
의 에서 확인 할 수 있으나staging
할 수 없다하위 프로젝트
submodule
에서 작업 후 커밋한 내용은main-project
의Staging area
에 추가된다 이후commit
및push
진행해서 내용을 업데이트 할 수 있다.
3. 서브모듈 업데이트
main-project
새로운 곳에 clone
- 서브 모듈의 내용은 추가되어있지 않음
아래 명령어들로 서브모듈 init 후 클론 진행
git submodule init (특정 서브모듈 지정시 해당 이름)
git submodule update
GitHub에서 submodule
에 수정사항 커밋
git submodule update --remote
- 서브모듈 안에 또 서브모듈이 있을 시:
--recursive
추가
참고
https://www.inflearn.com/course/%EC%A0%9C%EB%8C%80%EB%A1%9C-%ED%8C%8C%EB%8A%94-%EA%B9%83/unit/102398
'git & github' 카테고리의 다른 글
Git Commit 메시지 제대로 작성하기 (0) | 2024.04.24 |
---|---|
git github 처음부터 다시 배우기 - 6. git hub 활용 (0) | 2023.02.15 |
git github 처음부터 다시 배우기 - 3. git 디테일 (0) | 2023.02.13 |
git github 처음부터 다시 배우기 - 4. commit 디테일 (0) | 2023.02.09 |
git github 처음부터 다시 배우기 - 2. git hub (0) | 2023.02.06 |