Git 히스토리에서 파일 이름 변경 여부 확인 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 파일 이름을 변경한 후에도 Git 에서 파일의 히스토리를 효과적으로 추적하는 방법을 배우게 됩니다. 파일 이름 변경을 거쳐 파일의 히스토리를 추적하기 위해 강력한 git log --follow 명령어를 살펴볼 것입니다.

또한 git diff --name-status를 사용하여 커밋 간의 파일 상태를 검사하는 방법도 배우고, 마지막으로 이름이 변경되지 않은 파일에서 이러한 기술을 테스트하여 출력의 차이점을 이해할 것입니다.

git log --follow 실행 -- 파일

이 단계에서는 파일 이름을 변경한 경우에도 특정 파일의 히스토리를 추적하는 방법을 살펴봅니다. 이때 git log --follow 명령어가 유용하게 사용됩니다.

먼저, 프로젝트 디렉토리에 있는지 확인해 보겠습니다.

cd ~/project/my-time-machine

이제 새 파일을 만들고 내용을 추가해 보겠습니다.

echo "This is the original content." > original_file.txt

이 파일을 추가하고 커밋합니다.

git add original_file.txt
git commit -m "Add original file"

다음과 유사한 출력을 볼 수 있습니다.

[master 1a2b3c4] Add original file
 1 file changed, 1 insertion(+)
 create mode 100644 original_file.txt

이제 파일 이름을 변경해 보겠습니다.

git mv original_file.txt renamed_file.txt

변경 사항을 확인하기 위해 상태를 확인합니다.

git status

다음과 유사한 내용을 볼 수 있습니다.

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        renamed: original_file.txt -> renamed_file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

이름 변경을 커밋합니다.

git commit -m "Rename original file"

다음과 유사한 출력을 볼 수 있습니다.

[master 5d6e7f8] Rename original file
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename original_file.txt -> renamed_file.txt (100%)

이제 git log를 사용하여 이름이 변경된 파일의 히스토리를 확인해 보겠습니다.

git log renamed_file.txt

이렇게 하면 파일 이름이 변경된 커밋만 표시됩니다. 이름 변경 전의 히스토리를 보려면 --follow 옵션을 사용해야 합니다.

git log --follow renamed_file.txt

이 명령은 파일의 히스토리를 표시하며, 이름 변경을 추적합니다. "Rename original file" 커밋과 "Add original file" 커밋을 모두 볼 수 있습니다.

git log --follow 명령어는 저장소 내에서 이동하거나 이름이 변경된 파일의 전체 히스토리를 이해해야 할 때 필수적입니다. 현재 이름에 관계없이 서로 다른 커밋에서 파일의 진화를 추적하는 데 도움이 됩니다.

git diff --name-status 사용

이 단계에서는 git diff --name-status를 사용하여 커밋 간의 변경 사항 요약을 확인하는 방법을 배우고, 특히 변경된 파일의 상태와 이름에 중점을 둡니다.

먼저, 올바른 디렉토리에 있는지 확인합니다.

cd ~/project/my-time-machine

renamed_file.txt에 또 다른 변경 사항을 적용해 보겠습니다.

echo "Adding a new line." >> renamed_file.txt

이제 상태를 확인해 보겠습니다.

git status

renamed_file.txt가 수정되었음을 볼 수 있습니다.

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   renamed_file.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

no changes added to commit (use "git add" and/or "git commit -a")

변경 사항을 스테이징 영역에 추가합니다.

git add renamed_file.txt

이제 git diff --name-status를 사용하여 마지막 커밋과 스테이징된 변경 사항 간의 변경 사항을 확인해 보겠습니다.

git diff --name-status --cached

--cached 옵션은 git diff에게 스테이징된 변경 사항 (인덱스) 을 마지막 커밋 (HEAD) 과 비교하도록 지시합니다.

다음과 유사한 출력을 볼 수 있습니다.

M       renamed_file.txt

출력 M renamed_file.txt는 파일 renamed_file.txtModified(수정됨) 되었음을 나타냅니다.

이제 이 변경 사항을 커밋해 보겠습니다.

git commit -m "Add new line to renamed file"

다음과 유사한 출력을 볼 수 있습니다.

[master 9h0i1j2] Add new line to renamed file
 1 file changed, 1 insertion(+)

git diff --name-status 명령어는 변경 사항의 전체 내용을 표시하지 않고 Git 히스토리의 서로 다른 지점 간에 발생한 변경 사항 (추가, 수정, 삭제, 이름 변경, 복사) 의 종류를 빠르게 파악하는 데 매우 유용합니다. 이는 커밋하기 전에 변경 사항을 검토하거나 브랜치를 비교할 때 특히 유용합니다.

이름 변경되지 않은 파일 테스트

이 단계에서는 git log --follow가 이름이 변경되지 않은 파일에서 어떻게 동작하는지 살펴봅니다. 이를 통해 --follow가 언제 필요한지 이해도를 높일 수 있습니다.

먼저, 올바른 디렉토리에 있는지 확인합니다.

cd ~/project/my-time-machine

저장소에는 이미 renamed_file.txtmessage.txt가 있습니다. message.txt에 내용을 추가해 보겠습니다.

echo "This is a message." >> message.txt

상태를 확인합니다.

git status

message.txt가 수정되었고 renamed_file.txt는 최신 상태임을 볼 수 있습니다.

On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

message.txt에 대한 변경 사항을 추가하고 커밋합니다.

git add message.txt
git commit -m "Add content to message file"

다음과 유사한 출력을 볼 수 있습니다.

[master 3k4l5m6] Add content to message file
 1 file changed, 1 insertion(+)

이제 message.txt에 대해 git log를 사용해 보겠습니다.

git log message.txt

이렇게 하면 message.txt의 히스토리가 표시됩니다. "Add content to message file" 커밋과 message.txt가 생성된 초기 커밋 (첫 번째 랩에서) 을 볼 수 있습니다.

이제 message.txt에 대해 git log --follow를 시도해 보겠습니다.

git log --follow message.txt

출력이 git log message.txt와 동일하다는 것을 알 수 있습니다. 이는 message.txt가 이름이 변경되거나 이동되지 않았기 때문입니다. --follow 옵션은 특히 이름 변경을 통해 파일 히스토리를 추적하도록 설계되었습니다. 이름이 변경되지 않은 파일의 경우 git log만으로 충분합니다.

이 단계는 git log --follow가 이름이 변경된 파일을 추적하는 데 강력하지만, 이름을 유지하는 파일의 경우 표준 git log 명령어가 전체 히스토리를 제공한다는 것을 보여줍니다. 이러한 차이점을 이해하면 작업에 적합한 명령어를 선택하는 데 도움이 됩니다.

요약

이 랩에서는 Git 에서 파일의 이름을 변경한 후에도 파일의 히스토리를 추적하는 방법을 배웠습니다. 먼저 파일을 생성, 추가 및 커밋한 다음 git mv를 사용하여 이름을 변경하고 변경 사항을 커밋했습니다. 그런 다음 새 파일 이름에 대한 간단한 git log는 이름 변경 이후의 히스토리만 표시한다는 것을 시연했습니다.

핵심 내용은 git log --follow <filename> 명령어를 사용하는 것이었습니다. 이 강력한 옵션을 사용하면 Git 이 이름 변경을 통해 파일의 히스토리를 추적하여 생성부터 현재 상태까지의 전체적인 변화를 제공합니다. 이는 프로젝트 히스토리 내에서 파일 수정 사항의 전체 컨텍스트를 이해하는 데 중요합니다.