리포지토리 검사

Git Status: 리포지토리 검사

git status

git status 명령은 작업 디렉터리와 스테이징 영역의 상태를 표시합니다. 어떤 변경 사항이 스테이징되었는지 또는 스테이징되지 않았는지, 어떤 파일이 Git에서 추적되지 않는지 알 수 있습니다. 상태 출력에는 커밋된 프로젝트 기록에 관한 정보가 표시되지 않습니다. 이를 위해서는 git log를 사용해야 합니다.

관련 git 명령

  • git tag
    • 태그는 Git 기록의 특정 지점을 가리키는 참조입니다. git tag는 보통 표시된 버전 릴리스(예: v1.0.1)에 사용되는 기록의 한 지점을 캡처하는 데 사용됩니다.
  • git blame
    • git blame의 개략적인 수준의 기능은 파일의 커밋된 특정 줄에 연결된 작성자 메타데이터를 표시하는 것입니다. 특정 코드의 기록을 살펴보고 어떤 코드가 리포지토리에 추가되었는지, 추가 방법 및 이유에 대한 질문에 답하는 데 사용됩니다.
  • git log
    • git log 명령은 커밋된 스냅샷을 표시합니다. 프로젝트 기록을 나열하고, 필터링하고, 특정한 변경 사항을 검색할 수 있습니다.

사용

git status

스테이징된 파일, 스테이징되지 않은 파일, 추적되지 않은 파일을 나열합니다.

토론

git status 명령은 비교적 간단한 명령으로, git addgit commit과 관련하여 무슨 일이 일어났는지 보여줍니다. 상태 메시지에는 파일 스테이징/스테이징 취소와 관련된 설명도 포함되어 있습니다. git status 호출의 세 가지 주요 범주를 보여주는 샘플 출력은 다음과 같습니다.

# On branch main
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
#modified: hello.py
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
#modified: main.py
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
#hello.pyc

파일 무시

추적되지 않은 파일은 일반적으로 두 가지 범주로 나뉩니다. 프로젝트에 방금 추가되었지만 아직 커밋되지 않은 파일이거나 .pyc, .obj, .exe, 등과 같은 컴파일된 바이너리입니다. 전자에 해당하는 파일을 git status 출력에 포함시키면 분명히 유용하지만 후자는 리포지토리에서 실제로 무슨 일이 일어나고 있는지 알기가 어려울 수 있습니다.

그래서 Git은 .gitignore라는 특수 파일에 경로를 넣어 파일을 완전히 무시할 수 있도록 합니다. 무시하려는 모든 파일은 별도의 줄에 포함되며 * 기호를 와일드카드로 사용할 수 있습니다. 예를 들어, 프로젝트 루트에 있는 .gitignore 파일에 다음을 추가하면 컴파일된 Python 모듈이 git status에 나타나지 않게 됩니다.

*.pyc

의도하지 않은 것을 실수로 커밋하지 않도록 변경 사항을 커밋하기 전에 리포지토리의 상태를 확인하는 것이 좋습니다. 이 예시에서는 스냅샷을 스테이징하고 커밋하기 전과 후의 리포지토리 상태를 표시합니다.

# Edit hello.py
git status
# hello.py is listed under "Changes not staged for commit"
git add hello.py
git status
# hello.py is listed under "Changes to be committed"
git commit
git status
# nothing to commit (working directory clean)

첫 번째 상태 출력에는 파일이 스테이징된 것으로 표시됩니다. git add 작업은 두 번째 git status에 반영되며 작업 디렉터리가 가장 최근 커밋과 일치하므로 마지막 상태 출력에서 커밋할 것이 없다고 알려줄 것입니다. 일부 Git 명령(예: git merge)을 사용하려면 실수로 변경 사항을 덮어쓰지 않도록 작업 디렉터리를 정리해야 합니다.

git log

git log 명령은 커밋된 스냅샷을 표시합니다. 프로젝트 기록을 나열하고, 필터링하고, 특정한 변경 사항을 검색할 수 있습니다. git status를 사용하면 작업 디렉터리 및 스테이징 영역을 검사할 수 있지만 git log는 커밋된 기록에서만 작동합니다.

Git 자습서: git status 및 git log 비교

로그 출력은 간단하게 커밋을 필터링하는 것부터 완전한 사용자 정의 형식으로 표시하는 것까지 여러 가지 방법으로 사용자 지정할 수 있습니다. git log의 가장 일반적인 구성 중 몇 가지는 아래와 같습니다.

사용

git log

기본 형식을 사용하여 전체 커밋 기록을 표시합니다. 출력이 하나의 화면 이상을 차지하면 Space 키를 사용하여 스크롤하고 q를 사용하여 종료할 수 있습니다.

git log -n <limit>

으로 커밋의 수를 제한합니다. 예를 들어, git log -n 3은 3개의 커밋만 표시합니다.

각 커밋을 한 줄로 압축합니다. 프로젝트 기록의 간략한 개요를 보는 데 유용합니다.

git log --oneline
git log --stat

일반 git log 정보와 함께 어떤 파일이 변경되었는지, 그리고 각 파일에서 추가되거나 삭제된 줄의 상대적인 개수를 포함합니다.

git log -p

각 커밋을 나타내는 패치를 표시합니다. 프로젝트 기록을 가장 자세하게 볼 수 있는 각 커밋의 전체 diff를 보여줍니다.

git log --author="<pattern>"

특정 작성자의 커밋을 검색합니다. 인수는 일반 문자열이나 정규식일 수 있습니다.

git log --grep="<pattern>"

과 일치하는 커밋 메시지로 커밋을 검색합니다. 일반 문자열이나 정규식일 수 있습니다.

git log <since>..<until>

< since >< until > 사이에 발생하는 커밋만 보여줍니다. 두 인수 모두 커밋 ID, 브랜치 이름, HEAD 또는 다른 종류의 수정본 참조일 수 있습니다.

git log <file>

지정된 파일을 포함하는 커밋만 표시합니다. 특정 파일의 기록을 쉽게 볼 수 있는 방법입니다.

git log --graph --decorate --oneline

고려할 만한 몇 가지 유용한 옵션이 있습니다. --graph 플래그는 커밋 메시지 왼쪽에 커밋의 텍스트 기반 그래프를 그립니다. --decorate는 표시된 커밋의 브랜치 이름이나 태그를 추가합니다. --oneline은 커밋 정보를 한 줄로 표시하여 커밋을 한 눈에 더 쉽게 찾아볼 수 있도록 합니다.

토론

git log 명령은 리포지토리 기록을 탐색하기 위한 Git의 기본 도구입니다. 프로젝트의 특정 버전을 찾아야 하거나 기능 브랜치에서 병합하면 어떤 변화가 생길지 알아내야 할 때 사용하게 됩니다.

commit 3157ee3718e180a9476bf2e5cab8e3f1e78a73b7
Author: John Smith

대부분 꽤 간단하지만 첫 줄에는 약간의 설명이 필요합니다. commit 뒤의 40자 문자열은 커밋 콘텐츠의 SHA-1 체크섬이며 두 가지 용도로 사용됩니다. 우선 커밋의 무결성을 보장합니다. 커밋이 손상되면 커밋은 다른 체크섬을 생성합니다. 두 번째로 커밋의 고유한 ID 역할을 합니다.

이 ID는 특정한 커밋을 참조하기 위해 git log ..과 같은 명령에 사용될 수 있습니다. 예를 들어, git log 3157e..5ab91은 ID가 3157e5ab91인 커밋 사이의 모든 것을 표시합니다. 체크섬 외에도 개별 커밋을 참조하는 기타 일반적인 방법으로는 브랜치 이름(브랜치 모듈에서 설명함) 및 HEAD 키워드가 있습니다. HEAD는 브랜치든 특정 커밋이든 관계없이 항상 현재 커밋을 참조합니다.

~ 문자는 커밋의 상위 항목을 상대적으로 참조할 때 유용합니다. 예를 들어, 3157e~13157e 이전의 커밋을 의미하고 HEAD~3은 현재 커밋의 최상위 항목에 해당합니다.

이러한 모든 식별 방법의 기본 개념은 특정 커밋을 기반으로 작업을 수행하도록 하는 것입니다. git log 명령은 작업하려는 커밋을 찾도록 해주므로 보통 이러한 상호 작용의 시작점입니다.

사용 방법 섹션에는 git log의 예시가 많이 나와 있는데 여러 옵션을 하나의 명령으로 결합할 수 있다는 점을 명심하세요.

git log --author="John Smith" -p hello.py

이렇게 하면 John Smith가 hello.py 파일에 적용한 모든 변경 사항의 전체 diff가 표시됩니다.

.. 구문은 브랜치를 비교하는 데 매우 유용한 도구입니다. 다음 예시는 main 포함되지 않은 some-feature에 있는 모든 커밋에 대한 간략한 개요를 표시합니다.

git log --oneline main..some-feature

git status에 대해 알아볼 준비가 되셨습니까?

이 대화형 자습서를 사용해 보세요.

지금 시작하기