Git 수정하기

수현·2024년 2월 13일

Git & GitHub

목록 보기
2/3

Git 커밋 구조 및 관련 명령어 정리

1. 커밋(Commit)

  • 정의: Git에서 변경사항을 저장하는 단위로, 메타데이터를 포함한다. 메타데이터에는 작성자, 날짜와 같은 정보 외에도 이 커밋을 생성하기 위한 소스(부모 커밋들의 정보)가 포함된다.
  • 예시: 사용자가 파일 수정 후 git commit -m "수정 내용 요약" 명령어를 사용하여 커밋을 생성. 이때, 메타데이터에는 수정한 사람, 날짜 등의 정보가 저장된다.

2. 트리(Tree)

  • 정의: 저장소 내 파일들의 이름과 위치를 추적한다. 디렉토리 구조를 나타내며, 각 파일은 Blob으로, 서브디렉토리는 다른 트리로 참조된다.
  • 예시: 프로젝트에 src/ 디렉토리와 README.md 파일이 있을 때, 이 구조는 트리 객체로 관리되며, src/ 디렉토리는 또 다른 트리 객체로, README.md 파일은 Blob 객체로 참조된다.

3. Blob(Binary Large Object)

  • 정의: 데이터의 종류에 상관없이 데이터를 저장하는 객체. 파일의 내용을 담고 있으며, 파일의 이름이나 디렉토리 구조는 포함하지 않는다.
  • 예시: README.md 파일의 실제 내용은 Blob 객체에 저장된다. 파일 내용이 변경되면 새로운 Blob 객체가 생성된다.

Git Hash

  • 정의: 해시 함수를 통해 생성된 고유한 값으로, 파일의 내용이 동일하면 해시 값도 동일하다. 이를 통해 파일의 내용 변경 유무를 효율적으로 확인할 수 있다.
  • 예시: 두 개발자가 동일한 파일을 수정하지 않았다면, 해당 파일의 해시 값은 같다. 이는 파일이 동일함을 의미한다.
echo "Hello, Git!" > example.txt
git hash-object example.txt
ce013625030ba8dba906f756967f9e9ca394464a

Git Log

  • 정의: 커밋의 기록을 확인할 수 있는 명령어. 작업 내역을 시간 순으로 조회할 수 있다.
  • 예시: git log 명령어를 사용하면, 저장소의 커밋 히스토리를 확인할 수 있다. 각 커밋의 메타데이터(작성자, 날짜 등)와 함께 조회된다.
git log --oneline
1a2b3c4d5e README 파일 수정
2b3c4d5e6f 초기 프로젝트 설정
3c4d5e6f7g 첫 번째 커밋

Git Show

  • 정의: 특정 커밋이나 객체의 정보를 보여주는 명령어. 커밋의 변경사항, 트리의 구조, Blob의 내용 등을 확인할 수 있다.
  • 예시: git show [커밋 해시] 명령어를 사용하면, 해당 커밋의 상세 변경 내용을 확인할 수 있다.
git show 1a2b3c4d5e
commit 1a2b3c4d5ef67890d1234567890abcdef1234567 (HEAD -> main, origin/main)
Author: 홍길동 <honggildong@example.com>
Date:   Mon Feb 1 12:34:56 2021 +0900

    README 파일 수정

diff --git a/README.md b/README.md
index 4b825dc..8e73b0e 100644
--- a/README.md
+++ b/README.md
@@ -1 +1 @@
-Hello, World!
+Hello, Git!

Git Diff 및 Git Annotate 요약

Git Diff 명령어

  • git diff -r HEAD: 가장 최근 커밋과 작업 디렉토리 사이의 차이를 비교한다.
  • git diff -r HEAD~1: 두 번째로 최근의 커밋과 가장 최근 커밋 사이의 차이를 비교한다.

Git Diff 비교 예시

  • git diff 34235g3 sfd430f: 34235g3 커밋과 sfd430f 커밋 사이의 차이를 비교한다.
  • git diff HEAD~3 HEAD~2: 네 번째로 최근 커밋과 세 번째로 최근 커밋 사이의 차이를 비교한다.

Git Annotate 명령어

  • git annotate report.md: report.md 파일의 각 라인별로 변경 사항을 문서화하며, 해당 라인을 마지막으로 수정한 커밋과 작성자 정보를 보여준다.

변경 취소 및 Git 명령어 요약

단일 파일 변경 취소

  1. 단일 파일 언스테이징: 작업 디렉토리에서 변경된 파일을 스테이징 영역(커밋 준비 영역)에서 제거하고 싶을 때 사용한다.
  • git reset HEAD file.csv: file.csv 파일의 변경사항을 언스테이징한다.
  • nano file.csv: file.csv 파일을 수정한다.
  • git add file.csv: 수정된 file.csv 파일을 다시 스테이징한다.
  • git commit -m "message": 변경사항을 커밋한다.

모든 파일 변경 취소

  1. 모든 파일 언스테이징: 작업 디렉토리의 모든 변경사항을 스테이징 영역에서 제거하고 싶을 때 사용한다.
  • git reset HEAD: 모든 변경사항을 언스테이징한다.
  1. 파일 변경사항 취소:
  • git checkout -- file.csv: file.csv 파일의 변경사항을 취소하고 마지막 커밋 상태로 되돌린다. 이 명령어는 파일의 모든 변경사항을 영구적으로 삭제한다.
  • git checkout .: 작업 디렉토리의 모든 파일을 마지막 커밋 상태로 되돌린다. 이는 저장소에 있는 모든 파일의 버전을 마지막 커밋으로 변경한다는 의미이다.

주의사항

  • git checkout -- file.csv 사용 시, 스테이징되지 않은 변경사항은 영구적으로 손실된다. 따라서 변경사항을 완전히 포기하고자 할 때만 사용해야 한다.
  • git checkout . 명령어는 작업 디렉토리 내의 모든 변경사항을 취소한다. 이는 복구할 수 없으므로 주의해서 사용해야 한다.

file.csv에 실수로 잘못된 데이터를 추가한 후, 이를 스테이징 했다면 git reset HEAD file.csv로 스테이징된 변경사항을 취소할 수 있다. 이후 git checkout -- file.csv를 통해 파일을 마지막 커밋 상태로 되돌려, 잘못된 변경사항을 완전히 제거할 수 있다.

Git Log 출력 커스터마이징 및 이전 버전 파일 복원

Git Log 출력 커스터마이징

  1. 최근 커밋 확인:
  • git log -3: 가장 최근 3개의 커밋 로그를 보여준다.
  • git log -3 report.md: report.md 파일에 대한 가장 최근 3개의 커밋 로그를 보여준다.
  1. 시간 범위로 커밋 확인:
  • git log --since='Month Day Year': 지정된 날짜 이후의 커밋 로그를 보여준다. 예: git log --since='Apr 2 2022'.
  • git log --since='Apr 2 2022' --until='Apr 11 2022': 지정된 날짜 범위 내의 커밋 로그를 보여준다.

이전 버전 파일 복원

  1. 특정 파일의 이전 버전 복원:
  • git checkout -- filename: 작업 디렉토리의 filename 파일을 마지막 커밋 상태로 되돌린다.
  • git checkout dc9d8fac filename.csv: filename.csv 파일을 특정 커밋(dc9d8fac)의 버전으로 되돌린다.
  • git checkout HEAD~1 filename.csv: filename.csv 파일을 바로 이전 커밋의 버전으로 되돌린다.
  1. 커밋으로 되돌리기:
  • git checkout dc9d8fac: 전체 저장소를 특정 커밋(dc9d8fac) 상태로 되돌린다.
  • git checkout HEAD~1: 전체 저장소를 바로 이전 커밋의 상태로 되돌린다.

추적되지 않는 파일 확인 및 삭제

  • git clean -n: 추적되지 않는 파일을 보여주지만, 실제로 삭제하지는 않는다.
  • git clean -f: 추적되지 않는 파일을 영구적으로 삭제한다.
profile
데이터 분석 공부중:)

0개의 댓글