programing

커밋하기 전에 'git add'를 취소하려면 어떻게 해야 합니까?

testmans 2023. 4. 20. 20:07
반응형

커밋하기 전에 'git add'를 취소하려면 어떻게 해야 합니까?

다음 명령을 사용하여 Git에 파일을 잘못 추가했습니다.

git add myfile.txt

달리지 git commit이 변경을 커밋에 포함하지 않도록 하려면 어떻게 해야 합니까?

(실행 취소)git add"CHANGE: "CHANGE:

git reset <file>

다른 변경 없이 현재 인덱스("커밋될 예정" 목록)에서 파일이 제거됩니다.


모든 파일의 모든 변경 내용을 해제하려면:

git reset

버전의는 Git과 합니다.git reset HEAD <file> ★★★★★★★★★★★★★★★★★」git reset HEAD각각, 그리고 만약의 경우 실패할 것이다.HEAD에서 아직 커밋을 에) (에서 커밋을 에) 애매합니다HEAD(그건 바보 같은 짓이에요)그러나 Git 1.8.2에서는 이것이 변경되었기 때문에 Git의 최신 버전에서는 첫 번째 커밋을 하기 전에 위의 명령어를 사용할 수 있습니다.

이력내에 커밋이 없는 경우, 에러 아웃 하는 경우는 「옵션이나 파라메타 없음」이 사용됩니다만, 현재는 빈 인덱스가 표시됩니다(존재하지 않는 커밋에 일치하기 위해서도).

문서: git reset

원하는 것:

git rm --cached <added_file_to_undo>

이유:

처음 접했을 때 처음 해봤는데

git reset .

(처음 추가 전체를 원래대로 되돌리기 위해) 도움이 되는 다음 메시지가 나타납니다(그렇지 않습니다).

fatal: Failed to resolve 'HEAD' as a valid ref.

이는 HEAD ref(브런치?)가 첫 번째 커밋 후까지 존재하지 않기 때문인 것으로 판명되었습니다.즉, 저와 같은 초보자 문제에 직면하게 됩니다. 만약 저와 같은 워크플로우가 다음과 같다면 말이죠.

  1. 새로운 핫도인 Git을 시험하기 위해 새로운 프로젝트 디렉토리에 cd를 저장하세요.
  2. git init
  3. git add .
  4. git status

    ...많은 쓰레기들이...

    => 젠장, 그걸 다 추가하고 싶진 않았어.

  5. 구글 "git add"

    => 스택 오버플로 찾기 - 예

  6. git reset .

    => 치명적:'HEAD'를 유효한 참조로 확인하지 못했습니다.

게다가 메일링 리스트에는, 이것에 대한 도움이 되지 않는 버그가 기록되어 있는 것이 판명되었습니다.

그리고 Git 상태 출력에 올바른 솔루션이 있다는 것을 알게 되었습니다(그렇습니다, 저는 '크랩'이라고 얼버무렸습니다).

...
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
...

그리고 그 해답은 바로,git rm --cached FILE.

해 주세요.git rm파일의 로컬 작업 복사본을 삭제하지만 --disclosing을 사용하는 경우에는 삭제되지 않습니다.결과는 다음과 같습니다.git help rm:

--cached 이 옵션을 사용하여 인덱스에서 경로만 분할하고 제거합니다.수정 여부에 관계없이 작업 트리 파일은 남습니다.

사용을 계속합니다.

git rm --cached .

모든 것을 제거하고 다시 시작할 수 있습니다.잘 요. 왜냐하면 그 동안. 왜냐하면add .되었습니다.rm「」가 필요합니다.-r쉬다★★★★★★ 。

git rm -r --cached .

좋아, 이제 내가 시작했던 곳으로 돌아왔어다음 번에는 사용할 예정입니다.-n예행연습을 하고 무엇이 추가되는지 확인합니다.

git add -n .

는 모든 을 안전한 했다.git help rm--cached아무것도 파괴하지 않는다(그리고 내가 철자를 틀리면 어쩌지)

다음과 같이 입력합니다.

git status

Git은 스테이징된 내용 등을 알려드립니다.이것에는 분할 해제 방법에 대한 설명도 포함됩니다.

use "git reset HEAD <file>..." to unstage

나는 Git이 이런 상황에서 나에게 올바른 일을 하도록 유도하는 것을 꽤 잘한다고 생각한다.

주의: 최근 Git 버전(1.8.4.x)에서는 다음 메시지가 변경되었습니다.

(use "git rm --cached <file>..." to unstage)

하기 위해: " " to to to to " :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

에서 ',, ,, ,, ,, ', ', ', ', 」, 」, 」, 」, 」, 」, 」, 」, 」, 」, 」, an, an, ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', ', git reset는, '하고 있는 것 ..git디렉토리로 이동합니다.

이것은 걱정할 필요가 없습니다.파일은 실제로는 아직 저장소에 있지만, 「느슨한 오브젝트」로서 밖에 보존되어 있지 않습니다.복제, 푸시를 통해 다른 저장소로 복사되지 않으며, 공간은 조만간 회수됩니다.불안할 경우 다음을 실행할 수 있습니다.

git gc --prune=now

업데이트(다음은 가장 높은 응답으로 인해 발생할 수 있는 혼란을 해소하기 위한 시도입니다.)

그래서, 이건 진짜 실패작이야.git add

git reset HEAD <file>

또는

git rm --cached <file>

엄밀히 말하면, 내가 틀리지 않았다면, 없다.

git add 일반적으로 안전하게 취소할 수 없습니다.

이 있는지 해 봅시다git add <file>제는,, 음음음음음 음음음음

  1. if<file>이전에 추적되지 않았습니다.git add 는 현재 콘텐츠와 함께 캐시에 추가합니다.

  2. if<file>이미 추적되어 있습니다.git add 는 현재 콘텐츠(버전, 버전)를 캐시에 저장합니다.Git 에서는, 파일의 다른 버전(스냅샷)이 2개의 다른 아이템으로 간주되기 때문에, 이 액션은 여전히 add(단순히 갱신하는 것이 아니라)라고 불립니다.따라서, 우리는 캐시에 새로운 아이템을 추가하고, 나중에 커밋됩니다.

이에 비추어 볼 때, 질문은 약간 애매합니다.

실수로 명령어를 사용하여 파일을 추가했습니다.

OP의 시나리오는 첫 번째(추적되지 않은 파일)인 것 같습니다.우리는 "undo"가 추적 대상 항목에서 파일(현재 내용뿐 아니라)을 삭제하기를 원합니다.그렇다면 도망쳐도 상관없습니다.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

물론와 소문자 1을 추가하기 만 'add를 실행하는 인 게으른 통해 , .git commit -a명령어를 입력합니다.


* (편집: 위 내용은 실질적으로 맞지만, 스테이징된 변경을 복구하기 위한 약간의 해킹/복원 방법이 있을 수 있습니다.커밋되어 덮어쓰지는 않았습니다.요하네스 마토키치와 iolsmit의 코멘트를 참조해 주세요.)

Git을 사용하면 이미 추가된 파일을 쉽게 취소할 수 있습니다.리셋용myfile.txt된 것을 다음과

git reset HEAD myfile.txt

설명:

한 파일을 한 후 할 수 .git resetHead는 로컬의 파일 선두이며 마지막 파라미터는 파일 이름입니다.

아래 이미지에 기재되어 있는 스텝을 상세하게 작성했습니다.여기에는 이러한 경우에 발생할 수 있는 모든 스텝이 포함됩니다.

git HEAD 파일 리셋

git rm --cached . -r

현재 디렉토리에서 재귀적으로 추가한 모든 내용을 "추가 취소"합니다.

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>
    

달려.

git gui

모든 파일을 수동으로 삭제하거나 모든 파일을 선택한 후 [unstage from commit]버튼을 클릭합니다.

그 질문은 명확하게 제시되지 않았다. 는 ★★★★★★★★★★★★★★★★★★★.git add에는 다음 두 가지 의미가 있습니다.

  1. 준비 영역에 새 파일을 추가한 다음 실행 취소git rm --cached file.
  2. 스테이징 영역에 수정된 파일을 추가한 다음 실행 취소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

대답과 로 '하다'를 할 수 .git reset

하지만:

에 실제로 한 이 했습니다.git unadd: 자세한 내용은 git unadd를 참조해 주세요.

간단하게 말하면

git config --global alias.unadd "reset HEAD"

이제 할 수 있다

git unadd foo.txt bar.txt

대체/직접:

git reset HEAD foo.txt bar.txt
git reset filename.txt

는, 파일명을 합니다.filename.txt다른 내용을 변경하지 않고 현재 인덱스("커밋될 예정인" 변경 내용이 저장되는 "커밋 영역"이라고도 함)에서 작업 디렉토리를 덮어쓰지 않음)를 덮어쓰지 않음).

번째 " " " 를 수 git reset하고 Git 파산을 됩니다..git 앤 오버

2019년 갱신

관련 질문(여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기, 여기 참조)에서 지적된 바와 같이, 이제 다음과 같은 단일 파일을 분할할 수 있습니다.

git restore --staged <file>

(repo의 루트에서) 모든 파일을 다음 방법으로 분할 해제합니다.

git restore --staged .

메모들

git restore는 2019년 7월에 도입되어 2.23 버전으로 출시되었습니다.
--staged플래그를 지정하면 인덱스의 내용이 복원됩니다(여기에 표시된 내용).

" " 를 실행하고 git status 않은 파일하면 Git이 위해 사용하는 됩니다.git reset HEAD <file>v2.23)보다

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" (revert), "1" (리스트 복귀 쇼의 첫 번째 엔트리), 복귀 모드를 종료하기 위해 "return" (return) 및 "q" (quit) 입니다.

$ 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)
$

새로운 프로젝트를 시작할 때 이 성가신 문제를 피할 수 있는 방법은 다음과 같습니다.

  • 새 프로젝트의 주 디렉터리를 만듭니다.
  • 실행합니다.git init.
  • 이제 .gitignore 파일을 만듭니다(빈 파일인 경우에도).
  • .gitignore 파일을 커밋합니다.

은 Git을 하는 .git reset이치노커밋을 만들기 하면 그 후 1개의 커밋을 작성할 수 .git add -A ★★★★★★★★★★★★★★★★★」git reset원하는 횟수만큼 더 많은 시간을 할애해서 모든 것을 바로 잡을 수 있습니다.

이 방법의 또 다른 장점은 나중에 회선종료에 문제가 발생하여 모든 파일을 새로 고쳐야 할 경우 다음과 같이 간단하다는 것입니다.

  • 첫 번째 커밋을 확인합니다.모든 파일이 삭제됩니다.
  • 그런 다음 최근 약속을 다시 확인하십시오.현재 줄 끝 설정을 사용하여 파일의 새 복사본을 가져옵니다.

어쩌면 당신이 질문을 올린 이후로 Git이 진화했을지도 모른다.

$> git --version
git version 1.6.2.1

이제 다음 작업을 수행할 수 있습니다.

git reset HEAD .

이것이 당신이 찾고 있는 것입니다.

리비전을 지정하지 못한 경우 구분 기호를 포함해야 합니다.콘솔의 예:

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>

(Git 버전 1.7.5.4)

git 명령어 또는 GUI Git을 사용하여 분할 및 실행 취소할 수 있습니다.

단일 파일

git reset File.txt

다중 파일

git reset File1.txt File2.txt File3.txt

Home.js, ListItem.js, Update.js를 실수로 추가했다고 가정합니다.

여기에 이미지 설명을 입력하십시오.

=를 실행 취소/해제하고 싶다>

git reset src/components/home/Home.js src/components/listItem/ListItem.js src/components/update/Update.js

여기에 이미지 설명을 입력하십시오.

Git GUI를 사용한 동일한 예

git gui

창을 엽니다.단계적 변경에서 파일 선택을 취소합니다(커밋합니다).

여기에 이미지 설명을 입력하십시오.

위와 같이 스테이징 영역에서 새 파일을 제거하려면(새 파일의 경우에만) 다음 절차를 따릅니다.

git rm --cached FILE

실수로 추가된 새 파일에 대해서만 rm --cached를 사용합니다.

특정 폴더(및 하위 폴더)의 모든 파일을 리셋하려면 다음 명령을 사용합니다.

git reset *

하다를 사용하세요.*명령어를 사용하여 여러 파일을 한 번에 처리합니다.

git reset HEAD *.prj
git reset HEAD *.bmp
git reset HEAD *gdb*

기타.

냥냥 just just just just라고 치면 돼요.git reset하지 않은 것 요.git add .커밋한 적이 해 주세요.이치노

「」을 .newFile.txt:

여기에 이미지 설명을 입력하십시오.

로 해 보겠습니다.git add newFile.txt:

여기에 이미지 설명을 입력하십시오.

커밋하기 에 이 실행 하겠습니다.git reset newFile.txt:

여기에 이미지 설명을 입력하십시오.

특정 파일의 경우:

  • git my_file을 리셋합니다.txt
  • git checkout my_file.txt

추가된 모든 파일의 경우:

  • git reset을 클릭합니다.
  • git checkout을 실행합니다.

주의: 체크아웃은 파일의 코드를 변경하고 마지막으로 업데이트된(커밋된) 상태로 이동합니다.reset을 지정해도 코드는 변경되지 않고 헤더만 리셋됩니다.

git add: , "사용방법:

git reset filename

인터랙티브 모드도 있습니다.

git add -i

파일 추가를 취소하려면 옵션 3을 선택합니다.제 경우 여러 파일을 추가하고 싶은 경우가 많은데 인터랙티브 모드에서는 이런 숫자를 사용하여 파일을 추가할 수 있습니다.이 작업에는 1, 2, 3, 5를 제외한 모든 작업이 소요됩니다.

시퀀스를 선택하려면 1-5를 입력하여 1~5를 모두 선택합니다.

Git 준비 파일

이 명령어는 변경 내용을 언플래시합니다.

git reset HEAD filename.txt

를 사용할 수도 있습니다.

git add -p 

파일의 일부를 추가합니다.

git reset filename.txt  

파일 이름 파일을 제거합니다.txt를 현재 인덱스인 "commit될 예정" 영역에서 다른 변경 없이 사용할 수 있습니다.

git add myfile.txt에 추가됩니다. # 커밋 대상 목록입니다.

이 명령과는 정반대입니다.

git reset HEAD myfile.txt  # This will undo it.

그러면 이전 상태가 됩니다.지정은 다시 추적되지 않은 목록(이전 상태)에 포함됩니다.

지정된 파일로 헤드를 리셋합니다. 그래서 헤드에 의미가 없다면 단순히 리셋합니다.

언급URL : https://stackoverflow.com/questions/348170/how-do-i-undo-git-add-before-commit

반응형