Git로 날을 구하고 커밋 기록에서 제거하기

Git 커밋 작업 중에 오류가 발생하거나 문제가 있었나요? 아마도 잘못된 비밀 또는 민감한 데이터가 저장되었을 수도 있습니다. 다행히도 Git을 사용하여 파일을 처리하고 커밋에서 제거하고 히스토리를 수정할 수 있습니다.

여러 커밋을 수행하거나 이미 존재하는 커밋 히스토리가 있는 리포지토리를 클론한 경우, 이전 커밋을 확인하고 수행된 모든 커밋을 확인하는 것이 일반적입니다. 이 튜토리얼에서는 Git 히스토리에서 항목을 제거하는 방법을 배우게 됩니다.

계속해서 Git으로 문제를 해결하세요!

사전 준비 사항

이 튜토리얼은 단계별 지침으로 구성되어 있습니다. 따라하려면 다음 사항을 준비하세요:

  • A local machine to test the Git commands – This tutorial uses Windows 10, but later versions will also work.
  • Git Bash – 이 튜토리얼은 Git Bash 2.36을 사용합니다.

Git 커밋에서 파일 제거하기

팀으로 Git을 사용할 때 매일 수백 개의 커밋을 수행합니다. 따라서 잘못된 파일이나 여러 파일을 제거해야 할 수도 있습니다. 이러한 요구 사항은 일반적으로 코드 또는 구성 변경으로 인해 발생하며 문제가 될 수 있습니다.

이 문제를 해결하려면 Git 명령을 실행하여 파일 또는 여러 파일을 Git 커밋에서 제거해야 합니다. Git Bash 도구 중에서도 가장 인기 있는 도구 중 하나를 사용하여 Git 커밋에서 단일 파일을 제거할 것입니다.

1. Windows 기기에서 Git Bash 도구를 엽니다.

2. 그 다음, 아래 명령을 실행하여 저장소 폴더를 생성하고 해당 폴더로 전환합니다. 이 명령은 터미널에 출력을 제공하지 않습니다. 그러나 ~/Desktop/Repository/repo1을(를) 원하는 폴더 경로와 이름으로 교체해야 합니다.

# 저장소 폴더 및 repo1 하위 폴더 생성
mkdir -p ~/Desktop/Repository/repo1
# 작업 디렉토리를 repo1로 변경
cd ~/Desktop/Repository/repo1

3. 다음 명령을 실행하여 저장소를 초기화하고 test1.txttest2.txt라는 두 개의 텍스트 파일을 생성합니다.

# 로컬 저장소를 초기화합니다 (.git 숨겨진 폴더 생성)
git init
# 두 개의 텍스트 파일을 생성합니다
touch test_file1.txt test_file2.txt
Initializes the local repository

4. 이제 아래 명령을 실행하여 Git 커밋의 상태를 확인합니다.

git status

명령을 실행한 후에는 커밋이 추적되지 않고 아직 커밋되지 않았음을 알 수 있습니다. 아래와 같이 표시됩니다.

Checking the status of Git commits on the Git terminal

5. 아래 git add 명령을 실행하여 세 번째 단계에서 생성한 두 개의 텍스트 파일(test_file1.txttest_file2.txt)을 로컬 저장소에 추가합니다.

이 명령은 출력을 제공하지 않지만 파일을 추가하고 원격 저장소에 푸시하지 않습니다.

git add .

6. 그 다음, 아래 git commit 명령을 실행하여 Git이 로컬 저장소에서 진행 상황과 변경 사항을 추적하도록합니다.

git commit -m "Adding two new files test_file1.txt and text_file2.txt"
Committing Changes to Repository

7. 커밋한 후에 아래 명령을 실행하여 Git 커밋에서 특정 파일 (test_file2.txt)을 제거합니다.

git rm --cached test_file2.txt
Removing a Specific File from the Git Commit

8. 마지막으로 아래의 git status 명령을 다시 실행하여 리포지토리의 상태를 확인합니다.

git status

아래에서 볼 수 있듯이 해당 파일이 스테이징 영역 (Git 커밋)에서 제거되었으며 파일 (test_file2.txt)이 Untracked 파일로 표시됩니다.

Verifying the Removed Git Commit (test_file2.txt)

최근에 커밋한 모든 파일 제거

특정 파일을 Git 커밋에서 제거하는 방법을 배웠습니다. 그러나 일반적으로 여러 파일을 삭제해야하며, Git은 git reset 명령을 사용하여 이를 수행할 수 있습니다. git reset 명령은 저장소에서 변경 사항을 되돌리는 데 사용되는 복잡하지만 다재다능한 도구입니다.

git reset이 어떻게 작동하는지 보려면 몇 가지 파일을 커밋한 다음 변경 사항을 되돌려 Git 커밋에 저장된 최근에 커밋한 파일을 제거합니다.

1. test_file3.txttest_file4.txt라는 두 개의 새 텍스트 파일을 ~/Desktop/Repository/repo1 폴더에 만듭니다.

touch test_file3.txt test_file4.txt

2. 다음으로 아래의 git add 명령을 실행하십시오. 이 명령은 출력을 제공하지 않지만 새 텍스트 파일을 로컬 저장소(~/Desktop/Repository/repo1)에 추가합니다.

git add .

3. 아래의 git commit 명령을 실행하여 파일을 커밋하여 Git이 저장소에서 진행 및 변경 사항을 추적하도록합니다.

git commit -m "Adding two more files"
Committing Changes to the Repository

4. 이제 아래 명령을 실행하여 로컬 저장소의 상태를 확인하세요.

git status

아래에서 확인할 수 있듯이, 출력은 아무것도 커밋할 것이 없음을 나타내는 메시지를 표시합니다. 이는 저장소에 모든 것이 준비되어 있음을 나타냅니다.

Checking the Status of Git Commits

5. 다음으로, 아래의 git reset 명령을 실행하여 최근에 만든 커밋을 되돌립니다. 이 명령은 출력을 제공하지 않지만 test_file3.txttest_file4.txt 파일을 제거합니다.

git reset --soft HEAD~1

지금까지 커밋된 모든 파일을 제거하려면 git reset –soft HEAD^를 사용할 수도 있습니다.

6. 다음으로, 아래의 git status 명령을 다시 실행하여 저장소의 상태를 확인합니다.

git status

아래에서 출력은 커밋할 필요가 있는 test_file3.txt 및 test_file4.txt 파일을 나타냅니다. 이 출력은 Git 커밋에서 제거해야 할 파일을 나타냅니다.

Verifying the Recent Commits were Removed

Git 기록에서 특정 커밋 제거

모든 커밋된 파일을 제거하는 것은 새 출발을 원한다면 잘 작동합니다. 그러나 특정 커밋만 제거해야 하는 경우 어떻게 해야 할까요? 커밋의 ID를 알고 있다면 git revert 명령을 사용할 수 있습니다.

“최근에 커밋된 모든 파일 제거” 섹션의 마지막 단계에서 커밋이 커밋되지 않았지만 변경되었다는 것을 알았습니다. 이제 변경 사항을 커밋하여 git revert 명령이 작동하는 것을 확인하겠습니다.

로컬 저장소에서 최근 변경 사항을 커밋하기 위해 아래의 git commit 명령을 실행하세요.

git commit -m "Hello, I am committing those two files again"

명령을 실행한 후에는 두 개의 텍스트 파일이 다시 커밋되고 커밋 ID가 0315b85,로 표시됩니다.

Committing the Changes in the Local Repository

이제 이전 단계에서 수행한 커밋을 되돌리기 위해 아래 git revert 명령을 실행하세요. 반드시 커밋 ID를 0315b85로 대체하세요.

git revert 0315b85

아래에서 최근에 커밋한 두 파일이 삭제되었음을 확인할 수 있습니다.

Reverting the Changes in the Local Repository

Git 커밋 기록에서 디렉터리 삭제하기

이제 이미 커밋된 파일을 삭제하는 방법을 알고 계시겠지만, 디렉터리는 어떻게 삭제할까요? Git 커밋에서 디렉터리를 삭제하는 것은 파일을 삭제하는 것과 유사합니다.

1. 아래 명령을 실행하세요. 이 명령은 출력을 제공하지 않지만 다음을 수행합니다:

  • 로컬 저장소(~/Desktop/Repository/repo1) 내에 myfolder라는 폴더를 만듭니다.
  • ~/Desktop/Repository/repo1/myfolder 폴더 내에 l.txt라는 파일을 만듭니다.
mkdir myfolder && touch myfolder/l.txt

2. 다음으로 아래 git 명령을 실행하여 새 폴더(~/Desktop/Repository/repo1/myfolder)를 로컬 저장소에 추가합니다.

git add .
git commit -m "Adding folder"
Adding the new folder (folder) to the Local Repository

3. 다음 git rm 명령을 실행하여 두 번째 단계에서 커밋한 폴더(myfolder)를 제거합니다.

git rm -r myfolder/
Removing the New Folder (folder) in Git Commit

4. 마지막으로 git status 명령을 실행하여 저장소의 상태를 확인하고 폴더가 제거되었는지 확인합니다.

git status

아래에서 전체 폴더(myfolder)가 성공적으로 삭제되고 내부의 l.txt 파일도 삭제되었음을 확인할 수 있습니다.

Verifying the Folder (myfolder) Has Been Removed Successfully

결론

이 튜토리얼에서는 Git 커밋 작업에 대해 배웠습니다. 특정 커밋, 파일 또는 여러 파일을 제거하는 방법과 관련하여 알아보았습니다. 또한 로컬 저장소 내에서 전체 폴더를 삭제하고 변경 사항을 커밋하는 방법도 다뤄보았습니다.

이 시점에서 레포지토리에서 자신감 있게 변경 사항을 커밋하고 필요하지 않은 커밋을 제거할 수 있습니다. 이를 통해 문제 없이 작업할 수 있습니다.

이 튜토리얼에서 배운 내용을 기반으로 팀과 함께 커밋을 다루는 데 어떤 방법이 훌륭할 것으로 생각하시나요?

Source:
https://adamtheautomator.com/git-and-remove-from-commit/