다음 명령을 사용하여 실수로 Git에 파일을 추가했습니다.
git add myfile.txt
git commit
실행하지 않았습니다. 이 파일을 커밋에 포함하지 않도록 취소할 수 있는 방법이 있습니까?
질문자 :paxos1977
다음 명령을 사용하여 실수로 Git에 파일을 추가했습니다.
git add myfile.txt
git commit
실행하지 않았습니다. 이 파일을 커밋에 포함하지 않도록 취소할 수 있는 방법이 있습니까?
답변자 : genehack
커밋하기 전에 git add
를 실행 취소할 수 있습니다.
git reset <file>
다른 것은 변경하지 않고 현재 인덱스("약정 예정" 목록)에서 제거합니다.
당신이 사용할 수있는
git reset
모든 변경 사항을 언스테이징하기 위해 파일 이름 없이. 파일이 너무 많아 적당한 시간에 하나씩 나열할 수 없을 때 유용할 수 있습니다.
Git의 이전 버전에서 위의 명령은 각각 git reset HEAD <file>
및 git reset HEAD
HEAD
가 정의되지 않았거나(아직 저장소에 커밋을 하지 않았기 때문에) 모호한 경우 실패합니다. HEAD
라는 브랜치를 만들었습니다. 이것은 당신이 해서는 안 되는 어리석은 일입니다. 이것은 Git 1.8.2에서 변경 되었으므로 최신 버전의 Git에서는 첫 번째 커밋을 하기 전에도 위의 명령을 사용할 수 있습니다.
히스토리에 커밋이 없을 때 오류가 발생하는 데 "git reset"(옵션 또는 매개변수 없음)이 사용되지만 이제 빈 인덱스를 제공합니다(존재하지 않는 커밋과 일치하지 않음).
문서: 자식 재설정
답변자 : Rhubarb
당신이 원하는:
git rm --cached <added_file_to_undo>
추리:
처음 접했을 때 처음 시도한
git reset .
(내 전체 초기 추가를 취소하기 위해), 이 (그렇지 않은) 유용한 메시지를 얻기 위해서만:
fatal: Failed to resolve 'HEAD' as a valid ref.
이것은 HEAD ref(branch?)가 첫 번째 커밋 이후까지 존재하지 않기 때문입니다. 즉, 나와 같은 워크플로가 다음과 같은 경우 나와 같은 초보자의 문제에 직면하게 됩니다.
git init
git add .
git status
... 많은 쓰레기 두루마리 ...
=> 젠장, 나는 그 모든 것을 추가하고 싶지 않았습니다.
구글 "git add 실행 취소"
=> 스택 오버플로 찾기 - 예
git reset .
=> 치명적: 'HEAD'를 유효한 참조로 해석하지 못했습니다.
또한 메일링 리스트에 이것이 도움이 되지 않는 것에 대해 기록된 버그 가 있음이 밝혀졌습니다.
그리고 올바른 솔루션이 Git 상태 출력에 바로 있었다는 것
... # Changes to be committed: # (use "git rm --cached <file>..." to unstage) ...
그리고 해결책은 실제로 git rm --cached FILE
을 사용하는 것입니다.
여기 다른 곳의 경고에 유의하십시오. git rm
은 파일의 로컬 작업 복사본을 삭제하지만 --cached 를 사용하는 경우 에는 삭제하지 않습니다 . git help rm
의 결과는 다음과 같습니다.
--cached 이 옵션을 사용하여 인덱스에서만 경로를 준비 해제하고 제거합니다. 수정 여부에 관계없이 작업 트리 파일이 남습니다.
사용을 진행합니다
git rm --cached .
모든 것을 제거하고 다시 시작합니다. add .
하기 때문에 작동하지 않았습니다. 재귀적이며 rm
-r
이 필요합니다. 한숨을 쉬다.
git rm -r --cached .
좋아, 이제 내가 시작한 곳으로 돌아왔다. 다음 번에는 -n
을 사용하여 테스트 실행을 수행하고 추가될 내용을 확인하겠습니다.
git add -n .
--cached
가 아무것도 파괴하지 않는 것에 대해 git help rm
신뢰하기 전에 모든 것을 안전한 장소에 압축했습니다.
답변자 : Paul Beckingham
다음을 입력하는 경우:
git status
Git은 스테이징 해제 방법에 대한 지침을 포함하여 스테이징된 항목 등을 알려줍니다.
use "git reset HEAD <file>..." to unstage
나는 Git이 이와 같은 상황에서 올바른 일을 하도록 유도하는 꽤 좋은 일을 한다는 것을 알았다.
참고: 최근 Git 버전(1.8.4.x)은 다음 메시지를 변경했습니다.
(use "git rm --cached <file>..." to unstage)
답변자 : takeshin
명확히 하기 위해: git add
는 현재 작업 디렉토리에서 스테이징 영역 (인덱스)으로 변경 사항을 이동합니다.
이 프로세스를 스테이징 이라고 합니다. 따라서 변경 사항(변경된 파일) 을 준비 하는 가장 자연스러운 명령은 분명한 명령입니다.
git stage
git add
git stage
대한 입력하기 쉬운 별칭입니다.
git unstage
또는 git unadd
명령이 없는 것이 유감입니다. 관련 항목은 추측하거나 기억하기 어렵지만 매우 분명합니다.
git reset HEAD --
이에 대한 별칭을 쉽게 만들 수 있습니다.
git config --global alias.unadd 'reset HEAD --' git config --global alias.unstage 'reset HEAD --'
마지막으로 새로운 명령이 있습니다.
git add file1 git stage file2 git unadd file2 git unstage file1
개인적으로 더 짧은 별칭을 사용합니다.
git a # For staging git u # For unstaging
답변자 : leonbloy
허용되는 답변에 추가하여 실수로 추가한 파일이 큰 경우 ' git reset
.git
디렉토리의 공간을 차지하는 것처럼 보입니다.
이것은 걱정할 필요가 없습니다. 파일은 실제로 여전히 저장소에 있지만 "느슨한 개체"로만 있습니다. 이것은 다른 리포지토리에 복사되지 않으며(복제, 푸시를 통해) 공간은 결국 회수될 것입니다. 불안하다면 다음을 실행할 수 있습니다.
git gc --prune=now
업데이트 (다음은 가장 많이 투표된 답변에서 발생할 수 있는 혼란을 없애기 위한 저의 시도입니다):
git add
의 실제 실행 취소 는 무엇입니까?
git reset HEAD <file>
?
또는
git rm --cached <file>
?
엄밀히 말하면, 내가 틀리지 않았다면: none .
git add
는 취소할 수 없습니다 . 일반적으로 안전합니다.
git add <file>
실제로 하는 일을 기억해 봅시다.
<file>
이 이전에 추적되지 않은 경우 git add
는 현재 내용과 함께 이를 캐시에 추가합니다.
<file>
이 이미 추적된 경우 git add
는 현재 콘텐츠 (스냅샷, 버전)를 캐시에 저장합니다. Git에서 이 작업은 여전히 add 라고 합니다(단순히 업데이트 하는 것이 아님). 왜냐하면 파일의 두 가지 다른 버전(스냅샷)은 두 개의 다른 항목으로 간주되기 때문입니다. 따라서 실제로 캐시에 새 항목을 추가하여 결국에는 나중에 커밋.
이에 비추어 질문은 약간 모호합니다.
명령을 사용하여 실수로 파일을 추가했습니다 ...
OP의 시나리오는 첫 번째 시나리오(추적되지 않은 파일)인 것으로 보이며, 추적된 항목에서 파일(현재 내용뿐만 아니라)을 제거하기 위해 "실행 취소"를 원합니다. 이 경우 git rm --cached <file>
을 실행해도 됩니다.
git reset HEAD <file>
실행할 수도 있습니다. 이는 두 시나리오 모두에서 작동하기 때문에 일반적으로 선호됩니다. 이미 추적된 항목의 버전을 잘못 추가한 경우에도 실행 취소를 수행합니다.
그러나 두 가지 주의사항이 있습니다.
git reset HEAD
가 작동하지 않는 시나리오가 하나뿐입니다(답변에서 지적한 대로) git rm --cached
는 새로운 저장소(커밋 없음)를 수행합니다. 그러나 실제로 이것은 실질적으로 관련이 없는 경우입니다.
두 번째: git reset HEAD
는 이전에 캐시된 파일 내용을 마술처럼 복구할 수 없으며 HEAD에서 다시 동기화할 뿐입니다. 잘못 안내된 git add
가 이전 단계적 커밋되지 않은 버전을 덮어쓴 경우 복구할 수 없습니다. 그렇기 때문에 엄밀히 말하면 [*]를 취소할 수 없습니다.
예시:
$ git init $ echo "version 1" > file.txt $ git add file.txt # First add of file.txt $ git commit -m 'first commit' $ echo "version 2" > file.txt $ git add file.txt # Stage (don't commit) "version 2" of file.txt $ git diff --cached file.txt -version 1 +version 2 $ echo "version 3" > file.txt $ git diff file.txt -version 2 +version 3 $ git add file.txt # Oops we didn't mean this $ git reset HEAD file.txt # Undo? $ git diff --cached file.txt # No dif, of course. stage == HEAD $ git diff file.txt # We have irrevocably lost "version 2" -version 1 +version 3
물론 새 파일을 추가할 때만 'git add'를 수행하는 일반적인 게으른 워크플로(사례 1)를 따르고 커밋, git commit -a
명령을 통해 새 내용을 업데이트하는 경우 이는 그리 중요하지 않습니다.
* (편집: 위의 내용은 실질적으로 정확하지만, 단계적이지만 커밋되지 않고 덮어쓰여진 변경 사항을 복구하기 위한 약간의 해킹/복잡한 방법이 있을 수 있습니다. Johannes Matokic 및 iolsmit의 의견 참조)
답변자 : Alireza
이미 추가된 파일을 실행 취소 하는 것은 Git을 사용하면 매우 쉽습니다. myfile.txt
를 재설정하려면 다음을 사용하십시오.
git reset HEAD myfile.txt
설명:
원하지 않는 파일을 준비한 후 실행 취소하려면 git reset
수행할 수 있습니다. Head
는 로컬에서 파일의 머리이고 마지막 매개변수는 파일의 이름입니다.
다음과 같은 경우에 발생할 수 있는 모든 단계를 포함하여 더 자세한 정보를 위해 아래 이미지의 단계를 만들었습니다.
답변자 : braitsch
git rm --cached . -r
현재 디렉토리에서 추가한 모든 항목을 재귀적으로 "추가 해제"합니다.
답변자 : sjas
Git은 상상할 수 있는 모든 작업에 대한 명령을 가지고 있지만 일을 올바르게 하려면 광범위한 지식이 필요하고 기껏해야 직관적이지 않습니다...
이전에 수행한 작업:
git add .
, 또는 git add <file>
.원하는 것:
색인에서 파일을 제거하지만 버전을 유지하고 작업 복사본에 커밋되지 않은 변경 사항을 남겨둡니다.
git reset HEAD <file>
파일을 HEAD에서 마지막 상태로 재설정하고 변경 사항을 실행 취소하고 인덱스에서 제거합니다.
# Think `svn revert <file>` IIRC. git reset HEAD <file> git checkout <file> # If you have a `<branch>` named like `<file>`, use: git checkout -- <file>
git reset --hard HEAD
가 단일 파일에서 작동하지 않기 때문에 필요합니다.
<file>
을 제거하고 작업 복사본의 변경 사항과 함께 버전이 지정되지 않은 파일을 유지합니다.
git rm --cached <file>
작업 복사본 및 버전 관리에서 <file>
git rm <file>
답변자 : Khaja Minhajuddin
운영
git gui
수동으로 또는 모든 파일을 선택하고 커밋에서 스테이지 해제 버튼을 클릭하여 모든 파일을 제거합니다.
답변자 : Michael_Scharf
질문이 명확하게 제기되지 않습니다. 그 이유는 git add
에는 두 가지 의미가 있기 때문입니다.
git rm --cached file
로 실행 취소합니다.git reset HEAD file
로 실행 취소합니다.의심스러운 경우 사용
git reset HEAD file
두 경우 모두 예상한 일을 하기 때문입니다.
경고: 수정된 파일(이전에 저장소에 있던 git rm --cached file
을 수행하면 파일이 git commit
제거됩니다! 파일 시스템에는 여전히 존재하지만 다른 사람이 커밋을 가져오면 해당 파일은 작업 트리에서 삭제됩니다.
git status
파일이 새 파일 인지 수정 되었는지 알려줍니다.
On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: my_new_file.txt modified: my_modified_file.txt
답변자 : electblake
다른 많은 답변에 따라 git reset
하지만:
git unadd
대한 Git 명령(별칭)을 실제로 추가하는 이 멋진 작은 게시물을 찾았습니다. 자세한 내용은 git unadd 를 참조하거나 ..
간단히,
git config --global alias.unadd "reset HEAD"
이제 할 수 있습니다
git unadd foo.txt bar.txt
대안으로/직접:
git reset HEAD foo.txt bar.txt
답변자 : Ana Betts
git reset
사용할 수 없는 경우 "Git bankruptcy"를 선언하고 .git
폴더를 삭제하고 다시 시작하세요.
답변자 : Alex North-Keys
git add -i
를 사용하여 예정된 커밋에서 방금 추가한 파일을 제거합니다. 예시:
원하지 않는 파일 추가:
$ git add foo $ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: foo # # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...]#
대화형 추가로 이동하여 추가를 취소합니다(여기에 git에 입력한 명령은 "r"(되돌리기), "1"(목록 되돌리기의 첫 번째 항목이 표시됨), 되돌리기 모드에서 나가기 위한 'return' 및 "q"입니다. (그만두 다):
$ git add -i staged unstaged path 1: +1/-0 nothing foo *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> r staged unstaged path 1: +1/-0 nothing [f]oo Revert>> 1 staged unstaged path * 1: +1/-0 nothing [f]oo Revert>> note: foo is untracked now. reverted one path *** Commands *** 1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked 5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp What now> q Bye. $
그게 다야! 다음은 "foo"가 추적되지 않은 목록에 다시 있음을 보여주는 증거입니다.
$ git status # On branch master # Untracked files: # (use "git add <file>..." to include in what will be committed) # [...] # foo nothing added to commit but untracked files present (use "git add" to track) $
답변자 : gnud
git remove
또는 git rm
--cached
플래그와 함께 사용할 수 있습니다. 노력하다:
git help rm
답변자 : Ryan Lundy
새 프로젝트를 시작할 때 이 성가신 문제를 피하는 방법은 다음과 같습니다.
git init
실행합니다. Git은 커밋이 없으면 git reset
을 수행하는 것을 정말 어렵게 만듭니다. 하나를 갖기 위해 작은 초기 커밋을 만든 경우 모든 것을 올바르게 하기 위해 원하는 만큼 git add -A
및 git reset
이 방법의 또 다른 장점은 나중에 줄 끝 문제가 발생하여 모든 파일을 새로 고쳐야 하는 경우 쉽습니다.
답변자 : powlo
개정을 지정하지 못한 경우 구분 기호를 포함해야 합니다. 내 콘솔의 예:
git reset <path_to_file> fatal: ambiguous argument '<path_to_file>': unknown revision or path not in the working tree. Use '--' to separate paths from revisions git reset -- <path_to_file> Unstaged changes after reset: M <path_to_file>
(깃트 버전 1.7.5.4)
답변자 : Kokotte23
질문을 게시한 이후로 Git이 발전했을 수 있습니다.
$> git --version git version 1.6.2.1
이제 다음을 시도할 수 있습니다.
git reset HEAD .
이것은 당신이 찾고있는 것이어야합니다.
답변자 : Ran
위에서 제안한 대로 준비 영역에서 새 파일을 제거하려면(새 파일의 경우에만):
git rm --cached FILE
실수로 추가된 새 파일에만 rm --cached를 사용하십시오.
답변자 : Zorayr
특정 폴더(및 해당 하위 폴더)의 모든 파일을 재설정하려면 다음 명령을 사용할 수 있습니다.
git reset *
답변자 : boulder_ruby
*
명령을 사용하여 한 번에 여러 파일을 처리합니다.
git reset HEAD *.prj git reset HEAD *.bmp git reset HEAD *gdb*
등.
답변자 : Donovan
git reset
입력하기만 하면 되돌릴 것이고 git add .
마지막 커밋 이후. 전에 커밋했는지 확인하십시오.
답변자 : Vidura Mudalige
newFile.txt
새 파일을 생성한다고 가정합니다.
실수로 파일을 추가했다고 가정합니다. git add newFile.txt
이제 커밋하기 전에 이 추가를 취소하고 싶습니다. git reset newFile.txt
:
답변자 : prosoitos
관련 질문에 다른 사람에 의해 지적합니다 ( 여기 , 여기 , 여기 , 여기 , 여기 , 여기 , 그리고 여기에 ) 당신이 이제 단일 파일 unstage :
git restore --staged <file>
다음을 사용 하여 모든 파일 (리포지토리의 루트에서)을 언스테이징합니다.
git restore --staged .
git restore
는 2019년 7월 에 도입되어 버전 2.23에서 출시되었습니다.
--staged
플래그를 사용하여 인덱스의 내용을 복원합니다(여기서 묻는 내용).
git status
를 실행할 때 이제 Git이 파일을 스테이징 해제하는 데 사용하도록 제안합니다(v2.23 이전과 같이 git reset HEAD <file>
답변자 : Hasib Kamal
특정 파일의 경우:
- 자식 재설정 my_file.txt
- 자식 체크 아웃 my_file.txt
추가된 모든 파일의 경우:
- 자식 리셋 .
- 자식 체크 아웃 .
참고: 체크아웃 은 파일의 코드를 변경하고 마지막으로 업데이트된(커밋된) 상태로 이동합니다. 재설정 은 코드를 변경하지 않습니다. 그것은 단지 헤더를 재설정합니다.
답변자 : Anirudh Sood
git add
를 실행 취소하려면 다음을 사용하십시오.
git reset filename
답변자 : Jonathan
대화식 모드도 있습니다.
git add -i
파일 추가를 취소하려면 옵션 3을 선택하십시오. 제 경우에는 종종 하나 이상의 파일을 추가하고 싶고 대화식 모드에서는 이와 같은 숫자를 사용하여 파일을 추가할 수 있습니다. 4:1, 2, 3, 5를 제외한 모든 것이 필요합니다.
시퀀스를 선택하려면 1-5를 입력하여 1에서 5까지 모두 선택하십시오.
답변자 : wallerjake
이 명령은 변경 사항을 숨김 해제합니다.
git reset HEAD filename.txt
당신은 또한 사용할 수 있습니다
git add -p
파일의 일부를 추가합니다.
답변자 : Rahul Sinha
git reset filename.txt
현재 색인인 "약정 예정" 영역에서 filename.txt라는 파일을 다른 변경 없이 제거합니다.
답변자 : Mohideen bin Mohammed
git add myfile.txt
# 파일을 커밋 목록에 추가합니다.
이 명령과 완전히 반대되는 것은,
git reset HEAD myfile.txt # This will undo it.
따라서 이전 상태가 됩니다. 지정되지 않은 목록(이전 상태)에 다시 지정됩니다.
지정된 파일로 머리를 재설정합니다. 따라서 머리에 의미가 없으면 단순히 재설정합니다.
답변자 : Joseph Mathew
git reset filename.txt
현재 색인인 "약정 예정" 영역에서 filename.txt라는 파일을 다른 변경 없이 제거합니다.
출처 : Here
출처 : http:www.stackoverflow.com/questions/348170/how-do-i-undo-git-add-before-commit">
Java에서 NullPointerException 방지 (0) | 2021.09.26 |
---|---|
jQuery에서 요소가 숨겨져 있는지 어떻게 확인합니까? (0) | 2021.09.25 |
스택과 힙은 무엇이며 어디에 있습니까? (0) | 2021.09.25 |
JavaScript 비교에서 어떤 등호 연산자(== vs ===)를 사용해야 합니까? (0) | 2021.09.25 |
다른 JavaScript 파일에 JavaScript 파일을 어떻게 포함합니까? (0) | 2021.09.25 |