[git] 마지막 git add를 어떻게 취소 할 수 있습니까?

그것은 변화 (커밋되지 않은) 개최 지난 unstage하는 것이 가능 자식을 ? 현재 브랜치에 파일이 많았고 일부는 준비되었지만 일부는 아니라고 가정합니다. 어떤 시점에서 어리석은 프로그래머가 실수로 다음을 실행했습니다.

git add -- .

…대신에:

git checkout -- .

이 프로그래머는 이제 마법의 git 명령으로 마지막 변경 사항을 취소 할 수 있습니까 ? 아니면 처음 실험하기 전에 커밋 했어야합니까?



답변

사용할 수 있습니다 git reset. 마지막 커밋 후에 추가 한 모든 파일을 ‘무비’합니다.

일부 파일 만 스테이지 해제하려면을 사용하십시오 git reset -- <file 1> <file 2> <file n>.

또한을 사용하여 파일의 일부 변경 사항을 스테이지 해제 할 수 있습니다 git reset -p.


답변

당신은 취소 할 수 없습니다 최신 자식 추가,하지만 당신은 모든 취소 할 수 있습니다 add마지막 커밋 이후들. git reset커밋 인수가 없으면 인덱스가 재설정됩니다 (단계별 스테이지 변경 사항).

git reset


답변

따라서 실제 답변

이 프로그래머는 이제 마법의 git 명령으로 마지막 변경 사항을 취소 할 수 있습니까?

실제로 : 아니요, 마지막 단계 만 스테이지 해제 할 수 없습니다 git add.

우리가 다음 상황에서와 같이 질문을 해석하는 경우입니다.

초기 파일 :

void foo() {

}

main() {
    foo();
}

첫 번째 변경 다음에 git add:

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

두 번째 변화는 다음과 git add같습니다.

void foo(int bar, String baz) {
    print("$bar $baz");
}

main() {
    foo(1337, "h4x0r");
}

이 경우 git reset -p가장 작은 단위가 선이므로 도움이되지 않습니다. git다음의 중간 상태에 대해 알지 못합니다.

void foo(int bar) {
    print("$bar");
}

main() {
    foo(1337);
}

더 이상.


답변

사용할 수 있습니다 git reset( docs 참조 )


답변

날짜 git 프롬프트에서 :

  1. use "git rm --cached <file>..." to unstage파일이 저장소에없는 경우 파일을 보관하지 않고 보관합니다.
  2. use "git reset HEAD <file>..." to unstage파일이 저장소에 있고 수정 된대로 추가하는 경우 파일을 그대로 유지하고 스테이지를 해제합니다.

내 지식으로는 취소 git add --할 수 없지만 위에서 언급 한대로 파일 목록을 취소 할 수 있습니다.


답변

  • 색인에서 파일을 제거하지만 작업 사본에서 커밋되지 않은 변경 사항을 유지하고 버전을 유지하십시오.

    git reset head <file>
    
  • 변경 사항을 취소하고 색인에서 제거하여 HEAD에서 파일을 마지막 상태로 재설정하십시오.

    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에서 추가 된 모든 파일제거 하려는 경우

git reset

개별 파일제거 하려는 경우

git rm <file>