커밋 히스토리 살펴보기

  • git log : 커밋 히스토리를 출력
  • 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 : 모든 브랜치의 커밋 히스토리를, 커밋 간의 관계가 잘 드러나도록 그래프 형식으로 출력

 

깔끔한 커밋 히스토리

  1. git rebase [브랜치 이름] : A, B 브랜치가 있는 상태에서 지금 HEAD가 A 브랜치를 가리킬 때, git rebase B를 실행하면 A, B 브랜치가 분기하는 시작점이 된 공통 커밋 이후로부터 존재하는 A 브랜치 상의 커밋들이 그대로 B 브랜치의 최신 커밋 이후로 이어붙여짐(git merge와 같은 효과를 가지지만 커밋 히스토리가 한 줄로 깔끔하게 된다는 차이점이 있음)
  2. 코드를 수정해서 conflict 에러 해결 후 다음 커맨드 실행
git add .
git rebase --continue

  

작업 내용 임시 저장

  1. 코드를 수정하던 중에 다른 브랜치로 이동해야 할 경우
  2. 잘못된 브랜치에서 작업하고 있었을 경우

작업 내용을 임시로 저장할 필요가 생긴다. 

 

관련 커맨드

  • 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

'Git' 카테고리의 다른 글

[Git] Open Source Software  (0) 2023.04.06
Git 협업하기  (0) 2022.12.30
브랜치 사용하기  (0) 2022.12.30
Github에서 다른 프로젝트 가져오기  (0) 2022.12.30
Github 시작하기  (0) 2022.12.29

+ Recent posts