그것은 변화 (커밋되지 않은) 개최 지난 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 프롬프트에서 :
use "git rm --cached <file>..." to unstage
파일이 저장소에없는 경우 파일을 보관하지 않고 보관합니다.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>