커밋 히스토리 살펴보기
- git log --pretty=oneline : --pretty 옵션을 사용하면 커밋 히스토리를 다양한 방식으로 출력할 수 있습니다. --pretty 옵션에 oneline이라는 값을 주면 커밋 하나당 한 줄씩 출력해줍니다.
- git show [커밋 아이디 앞 4자리] : 특정 커밋에서 어떤 변경사항이 있었는지 확인
m 옵션 없이 커밋 메시지 남기기
1. 로컬 저장소에서 파일 수정
2. Git Bash 실행
git add .
git commit
3. text editor가 켜지면 키보드로 i를 누르고, 맨 위로 가서 커밋 메시지 작성
4. 저장하기
esc를 누르기
:wq 입력
엔터
5. Git Bash에서 git log를 통해 제대로 입력됐는지 확인
최신 커밋 수정하기
1. 로컬 파일의 코드 수정
2. Git Bash 실행
git add .
git commit --amend
- git commit --amend : 최신 커밋을 다시 수정해서 새로운 커밋으로 만듦
3. text editor에서 커밋 메시지를 그대로 써도 되고 수정해도 됨.
수정하고 싶은 경우 => 키보드로 i를 누르고, 맨 위로 가서 커밋 메시지 작성 및 저장(esc => :wq 입력 => enter)
4. 터미널에서 git push 실행
긴 커맨드에 alias 설정하기
- git config alias.[별명] [커맨드] : 길이가 긴 커맨드에 별명을 붙여서 이후로 별명으로 해당 커맨드를 실행할 수 있도록 설정
git config alias.history 'log --pretty=oneline'
이렇게 쓰고 실행하고 나면 앞으로 git histroy라고만 써도 자동으로 git log --pretty=oneline을 실행하게 됨.
두 커밋 간의 차이 보기
- git diff [커밋 A의 아이디] [커밋 B의 아이디] : 두 커밋 간의 차이 비교
* 이전의 커밋 아이디를 먼저 써준다.
과거 커밋으로 돌아가고 싶을 때
- git reset [옵션] [커밋 아이디] : 옵션에 따라 하는 작업이 달라짐(옵션을 생략하면 --mixed 옵션이 적용됨)
(1) HEAD가 특정 커밋을 가리키도록 이동시킴(--soft는 여기까지 수행)
(2) staging area도 특정 커밋처럼 리셋(--mixed는 여기까지 수행)
(3) working directory도 특정 커밋처럼 리셋(--hard는 여기까지 수행)
그리고 이때 커밋 아이디 대신 HEAD의 위치를 기준으로 한 표기법(예 : HEAD^, HEAD~3)을 사용해도 됨
-HEAD~x는 현재 HEAD가 가리키는 커밋보다 x단계 전에 있는 커밋
커밋에 tag 달기
새 버전의 시작점이 되는 커밋처럼, 특히 그 의미가 중요한 커밋들은 태그를 달아주면 나중에 프로젝트의 이력을 파악할 때 도움이 된다.
git tag [태그 이름] [커밋 아이디] : 특정 커밋에 태그를 붙임
프로젝트 디렉토리에 있는 모든 태그를 조회하려면,
git tag
각 태그와 연결된 커밋이 보고 싶으면,
git show [태그 이름]
git reset을 하고 나서 돌아오기
*reset을 해도 그 이후의 커밋들이 삭제되는 건 아님! => 단지 HEAD가 가리키던 브랜치가 새로운 커밋을 가리키게 될 뿐!
- git reflog : HEAD가 그동안 가리켜왔던 커밋들의 기록을 출력
커밋 히스토리를 그래프 형식으로 보는 방법
- git log --all --graph : 모든 브랜치의 커밋 히스토리를, 커밋 간의 관계가 잘 드러나도록 그래프 형식으로 출력
깔끔한 커밋 히스토리
- git rebase [브랜치 이름] : A, B 브랜치가 있는 상태에서 지금 HEAD가 A 브랜치를 가리킬 때, git rebase B를 실행하면 A, B 브랜치가 분기하는 시작점이 된 공통 커밋 이후로부터 존재하는 A 브랜치 상의 커밋들이 그대로 B 브랜치의 최신 커밋 이후로 이어붙여짐(git merge와 같은 효과를 가지지만 커밋 히스토리가 한 줄로 깔끔하게 된다는 차이점이 있음)
- 코드를 수정해서 conflict 에러 해결 후 다음 커맨드 실행
git add .
git rebase --continue
작업 내용 임시 저장
- 코드를 수정하던 중에 다른 브랜치로 이동해야 할 경우
- 잘못된 브랜치에서 작업하고 있었을 경우
작업 내용을 임시로 저장할 필요가 생긴다.
관련 커맨드
- git stash : 현재 작업 내용을 스택 영역에 저장
- git stash list : 스택 내용 조회
- git stash apply [커밋 아이디] : 스택 영역에 저장된 가장 최근의(혹은 특정) 작업 내용을 working directory에 적용
- git stash drop [커밋 아이디] : 스택 영역에 저장된 가장 최근의(혹은 특정) 작업 내용을 스택에서 삭제
- git stash pop [커밋 아이디] : 스택 영역에 저장된 가장 최근의(혹은 특정) 작업 내용을 working directory에 적용하면서 스택에서 삭제
- git cherry-pick [커밋 아이디] : 특정 커밋의 내용을 현재 커밋에 반영
여러 커밋을 하나의 커밋으로 만들기
어떠한 커밋을 없었던 걸로 하고 싶을 때 git reset을 활용할 수 있다.
예) 똑같은 함수를 더 효율적인 코드로 수정했을 경우
방법:
git reset --soft [커밋아이디]
git add .
git commit -m "커밋 메시지"
참고=>git reset에서 옵션으로 --mixed나 --soft를 사용하면 HEAD는 이전 커밋을 가리키지만 working directory는 그대로다.
출처: 코드잇 https://www.codeit.kr