[강의] Git_커밋 다루기

김하은·2023년 10월 24일
0

코드잇 강의 정리

목록 보기
27/60

커밋 다루기

커밋 히스토리 살펴보기

  • git log: 커밋 히스토리 보기 / 위로 올라갈수록 더 최근에 한 커밋임
  • 커밋 아이디(커밋 해시):
  • git log --pretty=oneline: 커밋 하나의 정보가 한줄에 보임
    --pretty 옵션
  • git show 46ca: 해당 커밋에서 어떤 파일이 어떻게 변했는지 알고 싶을 때
    커밋 아이디는 앞에서 4개 정도만 적어줘도 됨

m 옵션 없이 커밋 메시지 남기기

  1. git commit만 실행하기
  2. 그 다음 뜨는 텍스트 에디터인 vim 창에 커밋 메시지 남기기
  • 장점: 복잡하고 긴 커밋 메시지를 쉽게 남길 수 있음

최신 커밋 수정하기

git commit --amend: 최신 커밋을 수정해서 다시 새로운 커밋으로 만들기

커밋 생성, 커밋 메시지 작성 가이드라인

커밋 정보

  1. 커밋을 한 사용자 아이디
  2. 커밋한 날짜, 시간
  3. 커밋 메시지

커밋 메시지 작성 가이드라인

  1. 커밋 메시지의 제목과 상세 설명 사이에는 한 줄을 비우기
  2. 커밋 메시지의 제목 뒤에 온점. 붙이지 말기
  3. 커밋 메시지의 제목의 첫 번째 알파벳은 대문자로 작성하기
  4. 커밋 메시지의 제목은 명령조로 작성하기(Fix it / Fixed it / Fixes it)
  5. 커밋 상세 내용 추천 항목
    • 왜 커밋을 했는지
    • 어떤 문제가 있었고
    • 적용한 해결책이 어떤 효과를 가지는지
  6. 다른 사람들이 자신의 코드를 바로 이해할 수 있다고 가정하지 말고 최대한 친절하게 작성하기

커밋 가이드라인

  1. 하나의 커밋에는 하나의 수정사항, 하나의 이슈(issue)를 해결한 내용만 남기기
  2. 현재 프로젝트 디렉토리의 상태가 그 내부의 전체 코드를 실행했을 때 에러가 발생하지 않는 상태인 경우에만 커밋하기
    • 커밋으로 보관된 특정 시점의 전체 코드는 항상 문제없이 실행되는 상태여야 함
      • 과거 버전의 프로그램을 사용해야하거나
      • 과거 커밋을 시작점으로 한 다른 방향의 별도 프로젝트를 시작하거나
      • 아예 그 커밋으로 현재 프로젝트를 리셋할 수도 있기 때문

긴 커맨드에 alias 설정하기

  • aliasing: 길이가 긴 커맨드 전체에 별명을 붙여서 그 별명을 사용할 수 있도록 해주는 Git의 기능
  • git config alias.[별명] [커맨드]
  • git config alias.history 'log --pretty=oneline': git log --pretty=onelinegit history라는 별명으로 aliasing 하는 명령어

두 커밋 간의 차이 보기

git diff 이전_커밋_아이디 이후_커밋_아이디
git diff 2741 46ca

HEAD의 의미

  • 어떤 커밋 하나를 가리킴
  • 상황에 따라 다르지만 보통 가장 최근에 한 커밋을 가리킴
  • working directory는 HEAD가 가리키는 커밋에 따라 구성됨
  • HEAD가 다른 커밋을 가리키면 워킹 디렉토리 안에 있는 것들은 다르게 바뀔 수 있음

이전 커밋으로 git reset하기

  • git reset --hard 가고_싶은_커밋_아이디: HEAD가 과거의 커밋을 가리키게 할 수 있음 -> 워킹 디렉토리의 내용도 과거 커밋의 모습으로 돌아가게 함
    과거 커밋으로 아예 돌아가고 싶을 때 사용함
    git reset --hard 46ca

git reset의 옵션을 배우기 전에 확실히 알아야 할 부분

  1. working directory의 내부도 그 과거 커밋의 모습처럼 바뀌는 건 --hard 옵션을 썼기 때문이고 --soft, --mixed 옵션을 쓰면 그렇지 않음
    (HEAD가 과거의 커밋을 가리키게 되는 결과는 git reset에서 어느 옵션을 쓰든 항상 똑같음)
  2. staging area에 있던 것들은 커밋을 하더라도 그것과 상관없이 계속 남아있음

git reset의 3가지 옵션 I

  • git의 세가지 작업 영역 중 몇개의 영역까지 리셋을 하느냐로 구분할 수 있음
  • git reset [옵션] [커밋 아이디] : 옵션에 따라 하는 작업이 달라짐(옵션을 생략하면 --mixed 옵션이 적용됨)
    • HEAD가 특정 커밋을 가리키도록 이동시킴(--soft는 여기까지 수행)
    • staging area도 특정 커밋처럼 리셋(--mixed는 여기까지 수행)
    • working directory도 특정 커밋처럼 리셋(--hard는 여기까지 수행)

HEAD를 기준으로 git reset하기

  • 커밋 아이디 대신 쓸 수 있는 표현법
    HEAD^: 현재 HEAD가 가리키고 있는 커밋의 바로 이전 커밋을 나타냄
    HEAD~x: 현재 HEAD가 가리키는 커밋보다 x단계 전에 있는 커밋

커밋에 tag 달기

git tag [태그 이름] [커밋 아이디]

  • git tag: 프로젝트 디렉토리에 있는 모든 태그를 조회
  • git show [태그 이름]: 각 태그와 연결된 커밋이 보기
  • 새 버전의 시작점이 되는 커밋처럼, 특히 그 의미가 중요한 커밋들은 태그를 달아주면 나중에 프로젝트의 이력을 파악할 때 도움이 됨
profile
아이디어와 구현을 좋아합니다!

0개의 댓글