Git 커밋되지 않은 변경 사항 제거
-
git checkout
을 사용하여 Git에서 커밋되지 않은 변경 사항 제거 -
git reset
을 사용하여 Git에서 커밋되지 않은 변경 사항 제거 -
git stash
및git stash
를 사용하여 Git에서 커밋되지 않은 변경 사항 제거
이 문서에서는 로컬 저장소에 대한 커밋되지 않은 변경 사항을 취소하는 방법을 안내합니다.
기능으로 작업할 때 먼저 새 파일을 만들고 기존 파일에 변경 사항을 추가한 다음 일부 파일을 삭제할 수 있습니다. 결국 우리는 그것이 모두 잘못되었다는 것을 깨닫고 이전 커밋으로 돌아가야 합니다. 우리는 무엇을 해야 합니까?
$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: file.txt
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: deprecated_feature.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
우리는 그것을 달성하는 몇 가지 방법이 있습니다.
git checkout
을 사용하여 Git에서 커밋되지 않은 변경 사항 제거
이 명령은 추적된 파일에 대한 커밋되지 않은 변경 사항을 되돌립니다. 추적 파일은 일반적으로 git add
에 의해 추가된 후 git이 알고 있는 파일입니다.
$ git checkout .
Updated 2 paths from the index
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
nothing added to commit but untracked files present (use "git add" to track)
git add
를 통해 파일이 이미 스테이징 영역에 추가된 경우 git checkout
이 작동하지 않습니다.
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ git checkout file.txt
Updated 0 paths from the index
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
위의 예에서 file.txt
에 대한 변경 사항은 이 파일이 준비 영역에 있기 때문에 되돌려지지 않습니다.
git reset
을 사용하여 Git에서 커밋되지 않은 변경 사항 제거
스테이징 영역에서 커밋되지 않은 변경 사항을 제거하려면 다음 단계를 수행해야 합니다.
git reset
을 사용하여 스테이징 영역에서 파일을 스테이징 해제합니다.git checkout
을 사용하여 변경 사항을 실행 취소합니다.
$ git reset file.txt
Unstaged changes after reset:
M file.txt
$ git checkout file.txt
Updated 1 path from the index
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
nothing added to commit but untracked files present (use "git add" to track)
git reset
을 사용하여 커밋되지 않은 변경 사항을 제거하는 또 다른 방법은 --hard
옵션과 HEAD
매개변수를 사용하는 것입니다.
$ git reset --hard HEAD
HEAD is now at 1e087f5 Make some change to file.txt
$ git status
On branch main
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
nothing added to commit but untracked files present (use "git add" to track)
--hard
옵션은 Git이 현재 상태와 마지막 인수의 커밋 사이의 모든 변경 사항을 처리하도록 지정합니다. 이러한 이유로 이 명령은 위험한 것으로 간주되며 작업 파일을 확인하기 위해git status
를 실행한 후에 사용해야 합니다.- 최신 커밋에 대한
HEAD
별칭.
git stash
및 git stash
를 사용하여 Git에서 커밋되지 않은 변경 사항 제거
git checkout
및 git reset
의 단점은 추적되지 않은 파일을 제거할 수 없다는 것입니다. feature.txt
는 해당 명령을 실행한 후에도 유지됩니다.
첫 번째 예를 고려하십시오.
$ echo 'Add new implementation' > feature.txt
$ echo 'Enhance exising feature' >> file.txt
$ git add file.txt
$ rm deprecated_feature.txt
$ git status
On branch main
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: file.txt
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: deprecated_feature.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
feature.txt
준비된 파일, 추적되었지만 준비되지 않은 파일 및 추적되지 않은 파일을 포함하여 커밋되지 않은 모든 변경 사항을 제거합니다. 우리는 git stash
에 깔끔하게 접근하여 사용할 것입니다.
git stash
를 사용하면 변경 사항을 저장할 수 있지만 git commit
이 필요하지 않습니다. 커밋되지 않은 파일의 임시 저장소 역할을 합니다.
임시 저장소에 변경 사항을 추가한 후 Git에 저장된 내용을 drop
하도록 지시합니다. 따라서 커밋되지 않은 모든 변경 사항이 사라집니다.
$ git add .
$ git stash
Saved working directory and index state WIP on main: 16b9767 deprecated_feature.txt
$ git stash drop
Dropped refs/stash@{0} (aebeb2cbdcec917331f5793ef1238f5a525d29ec)
$ git status
On branch main
nothing to commit, working tree clean
요약하면 커밋되지 않은 변경 사항을 제거하는 몇 가지 접근 방식이 있습니다.
git checkout
은 파일이 준비 영역에 없을 때만 유용합니다.git reset
은 스테이징 영역에 있는 변경 사항에 유용하지만 추적되지 않은 파일의 변경 사항을 제거할 수 없으며git checkout
과의 조합이 필요합니다.git reset --hard HEAD
는 위보다 짧을 수 있지만 잠재적으로 위험합니다.git stash
와git add .
추적되지 않은 파일을 포함하여 모든 것을 제거할 수 있습니다.