문제

인덱스에 없는 작업 복사본의 변경 사항을 어떻게 삭제합니까?

도움이 되었습니까?

해결책

또 다른 빠른 방법은 다음과 같습니다.

git stash save --keep-index --include-untracked

포함할 필요는 없습니다. --include-untracked 그것에 대해 철저하게 말하고 싶지 않다면.

그 후에는 해당 숨김 항목을 삭제할 수 있습니다. git stash drop 원한다면 명령을 내리세요.

다른 팁

현재 작업 디렉토리의 모든 스테이지되지 않은 파일에 대해 다음을 사용하십시오.

git checkout -- .

특정 파일 사용의 경우:

git checkout -- path/to/file/to/revert

-- 여기서 제거하려면 논쟁의 모호함.

완전한 솔루션은 다음과 같습니다.

git clean -df
git checkout -- .

git clean 추적되지 않은 모든 파일을 제거합니다(경고:.gitignore에서 직접 언급된 무시된 파일은 삭제되지 않지만, 폴더에 있는 무시된 파일을 삭제할 수 있습니다.) 그리고 git checkout 단계화되지 않은 모든 변경 사항을 지웁니다.

현재 디렉터리의 현재 인덱스를 확인하고 현재 디렉터리 아래의 파일에 대한 모든 변경 사항을 삭제합니다.

git checkout .

또는 인덱스의 모든 파일을 체크아웃하여 작업 트리 파일을 덮어쓰는 것입니다.

git checkout-index -a -f
git clean -df

현재 디렉터리부터 버전 제어 대상이 아닌 파일을 반복적으로 제거하여 작업 트리를 정리합니다.

-d:추적되지 않는 파일과 함께 추적되지 않는 디렉터리 제거

-f:힘(상황에 따라 필요하지 않을 수도 있음) clean.requireForce 환경)

달리다 git help clean 설명서를 보려면

내가 가장 좋아하는 것은

git checkout -p

이를 통해 청크를 선택적으로 되돌릴 수 있습니다.

또한보십시오:

git add -p

내가 사용하는 정확한 옵션 조합을 제시하는 답변이 없으므로 다음과 같습니다.

git clean -dfx
git checkout .

이것은 중고 제품에 대한 온라인 도움말 텍스트입니다. git clean 옵션:

-d

추적되지 않는 파일과 함께 추적되지 않는 디렉터리를 제거합니다.추적되지 않는 디렉터리가 다른 Git 저장소에서 관리되는 경우 기본적으로 제거되지 않습니다.사용 -f 그러한 디렉토리를 정말로 제거하려면 옵션을 두 번 누르십시오.

-f

Git 구성 변수 clean.requireForce 로 설정되지 않았습니다 false, Git clean은 주어지지 않는 한 파일이나 디렉토리 삭제를 거부합니다. -f, -n, 또는 -i.Git은 다음 내의 디렉토리 삭제를 거부합니다. .git 두 번째가 아닌 한 하위 디렉터리 또는 파일 -f 주어진다.

-x

무시 규칙을 사용하지 마십시오 .gitignore (디렉터리당) 및 $GIT_DIR/info/exclude, 그러나 다음과 같이 제공된 무시 규칙을 계속 사용하십시오. -e 옵션.이를 통해 빌드 제품을 포함하여 추적되지 않은 모든 파일을 제거할 수 있습니다.이것은 사용될 수 있습니다(아마도 git reset) 깨끗한 빌드를 테스트하기 위해 깨끗한 작업 디렉터리를 만듭니다.

또한, git checkout . repo의 루트에서 수행되어야 합니다.

이 기사는 언제 어떤 명령을 사용해야 하는지 설명하는 데 도움이 되었습니다. http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

몇 가지 다른 경우가 있습니다:

  1. 파일을 준비하지 않은 경우 다음을 사용합니다. git checkout.Checkout은 "인덱스의 버전과 일치하도록 작업 트리의 파일을 업데이트합니다".파일이 준비되지 않은 경우(인덱스에 추가된 경우)...이 명령은 기본적으로 파일을 마지막 커밋 상태로 되돌립니다.

    git checkout -- foo.txt

  2. 파일을 준비한 경우 git Reset을 사용하십시오.재설정은 커밋과 일치하도록 인덱스를 변경합니다.

    git reset -- foo.txt

나는 그것을 사용하는 것으로 의심된다 git stash 조금 덜 위험하기 때문에 인기 있는 선택입니다.git Reset을 사용할 때 실수로 너무 많이 날려버린 경우 언제든지 다시 돌아갈 수 있습니다.재설정은 기본적으로 재귀적입니다.

자세한 조언은 위의 기사를 참조하세요.

이를 수행하는 가장 쉬운 방법은 다음 명령을 사용하는 것입니다.

이 명령은 작업 디렉터리의 변경 사항을 삭제하는 데 사용됩니다.

git checkout -- .

https://git-scm.com/docs/git-checkout

git 명령에서는 다음을 사용하여 추적되지 않은 파일을 숨깁니다.

git stash -u

http://git-scm.com/docs/git-stash

단지 바라는 것이라면 기존 파일의 변경 사항을 제거하려면, 사용 checkout (여기에 문서화되어 있습니다).

git checkout -- .
  • 지정된 분기가 없으므로 현재 분기를 체크아웃합니다.
  • 이중 하이픈(--)는 Git에게 다음 내용을 두 번째 인수(경로)로 가져와야 하며 분기 지정을 건너뛰었음을 알려줍니다.
  • 기간 (.)는 모든 경로를 나타냅니다.

네가 원한다면 추가된 파일을 제거하려면 마지막 커밋 이후 사용 clean (여기에 문서화되어 있습니다):

git clean -i 
  • 그만큼 -i 옵션은 대화형을 시작합니다 clean, 실수로 삭제되는 것을 방지합니다.
  • 더 빠른 실행을 위해 몇 가지 다른 옵션을 사용할 수 있습니다.설명서를 참조하세요.

당신이 원하는 경우 나중에 액세스할 수 있도록 변경 사항을 보관 공간으로 이동합니다., 사용 stash (여기에 문서화되어 있습니다):

git stash
  • 모든 변경 사항은 나중에 액세스할 수 있도록 Git의 Stash로 이동됩니다.
  • 보다 미묘한 숨기기를 위해 몇 가지 옵션을 사용할 수 있습니다.설명서를 참조하세요.

단계적이지 않은 변경 사항을 유지하는 데 관심이 없다면(특히 단계적 변경 사항이 새 파일인 경우) 다음이 유용하다고 생각합니다.

git diff | git apply --reverse

git status를 입력하면,(작업 디렉토리의 변경 사항을 삭제하려면 "git checkout -- ..."을 사용하세요)표시됩니다.

예를 들어 git checkout -- .

git checkout -f


man git-checkout:

-f, --force

Branch 전환 시에는 Index나 Working Tree가 HEAD와 달라도 진행하세요.이는 로컬 변경 사항을 버리는 데 사용됩니다.

인덱스에서 경로를 체크아웃할 때 병합되지 않은 항목이 있어도 실패하지 마십시오.대신 병합되지 않은 항목은 무시됩니다.

git stash를 사용할 수 있습니다. 문제가 발생하더라도 stash에서 되돌릴 수 있습니다.여기에 있는 다른 답변과 유사하지만 이것은 또한 모든 준비되지 않은 파일과 모든 준비되지 않은 삭제도 제거합니다.

git add .
git stash

모든 것이 정상인지 확인했다면 숨김 항목을 버리세요.

git stash drop

Bilal Maqsood의 답변 git clean 나에게도 효과가 있었지만 숨김 기능을 사용하면 더 많은 제어권을 가질 수 있습니다. 실수로 작업을 수행하더라도 변경 사항을 다시 되돌릴 수 있습니다.

업데이트

변경 사항이 1개 더 있는 것 같습니다(이전에는 왜 이것이 효과가 있었는지 모르겠습니다).

git add . -A 대신에 git add .

없이 -A 제거된 파일은 스테이징되지 않습니다.

변경 사항을 삭제하는 대신 리모컨을 원점으로 재설정했습니다.참고 - 이 방법은 폴더를 저장소의 폴더로 완전히 복원하는 것입니다.

그래서 나는 git Reset을 할 때 그들이 거기에 앉아 있지 않도록 하기 위해 이 작업을 수행합니다(나중에 - Origin/branchname에서 gitignores는 제외).

메모:아직 추적되지 않은 파일을 보관하고 싶지만 GITIGNORE에는 보관하지 않으려면 이 단계를 건너뛰는 것이 좋습니다. 이렇게 하면 원격 저장소에서 찾을 수 없는 추적되지 않은 파일이 지워지기 때문입니다(@XtrmJosh에게 감사드립니다).

git add --all

그럼 내가

git fetch --all

그런 다음 원점으로 재설정합니다.

git reset --hard origin/branchname

그러면 다시 원점으로 돌아갈 것입니다.브랜치를 다시 복제하는 것과 마찬가지로 모든 gitignored 파일을 로컬 및 제자리에 유지합니다.

아래 사용자 의견에 따라 업데이트되었습니다.사용자가 현재 있는 분기로 재설정하는 변형입니다.

git reset --hard @{u}

위의 모든 해결 방법을 시도했지만 여전히 스테이지되지 않은 새 파일을 제거할 수 없습니다.

사용 git clean -f 새 파일을 제거하려면 - 그래도 조심해서! 강제 옵션을 참고하세요.

간단히 말해서

git stash

모든 로컬 변경 사항이 제거됩니다.나중에 다음과 같이 말하여 사용할 수도 있습니다.

git stash apply 

또는 git stash pop

그냥 사용:

git stash -u

완료.쉬운.

만약 너라면 정말 당신의 숨김 스택에 관심을 갖고 다음을 따라갈 수 있습니다 git stash drop.하지만 그 시점에서는 (Mariusz Nowak의) 다음을 사용하는 것이 더 좋습니다.

git checkout -- .
git clean -df

그럼에도 불구하고 나는 좋아한다 git stash -u 추적된 변경 사항과 추적되지 않은 변경 사항을 모두 "삭제"하기 때문에 최고입니다. 하나의 명령.아직 git checkout -- . 추적 된 변경 사항 만 폐기합니다 git clean -df 추적되지 않은 변경 사항만 삭제합니다...두 명령을 모두 입력하는 것은 멀리 너무 많은 일 :)

이는 다음과 같은 디렉토리에서도 작동합니다.일반적인 git 권한을 벗어났습니다.

sudo chmod -R 664 ./* && git checkout -- . && git clean -dfx

최근에 나에게 일어난 일

cd path_to_project_folder  # take you to your project folder/working directory 
git checkout .             # removes all unstaged changes in working directory

저장소의 상태에 관계없이 언제든지 이전 커밋으로 재설정할 수 있습니다.

git reset --hard <commit hash>

그러면 해당 커밋 이후에 이루어진 모든 변경 사항이 삭제됩니다.

git clean -df보다 더 구체적인 새 파일을 제거하는 또 다른 방법(전체 파일이 아닌 일부 파일을 제거할 수 있음)은 새 파일을 먼저 인덱스에 추가한 다음 숨긴 다음 삭제하는 것입니다. 숨기는 장소.

이 기술은 어떤 이유로든 일반적인 메커니즘(예: rm)으로 추적되지 않은 모든 파일을 쉽게 삭제할 수 없는 경우에 유용합니다.

내 생각에는,

git clean -df

트릭을 수행해야합니다.에 따라 git clean에 대한 Git 문서

git-clean - 작업 트리에서 추적되지 않은 파일 제거

설명

현재 디렉토리에서 시작하여 버전 제어가 아닌 파일을 재귀 적으로 제거하여 작업 트리를 정리합니다.

일반적으로 GIT에 알려지지 않은 파일 만 제거되지만 -X 옵션이 지정되면 무시 된 파일도 제거됩니다.예를 들어, 모든 빌드 제품을 제거하는 데 유용 할 수 있습니다.

선택사항이라면...논쟁이 주어지고, 그 경로 만 영향을받습니다.

옵션

-d 추적되지 않는 파일과 함께 추적되지 않는 디렉터리를 제거합니다.추적되지 않은 디렉토리가 다른 GIT 저장소에 의해 관리되는 경우 기본적으로 제거되지 않습니다.이러한 디렉토리를 실제로 제거하려면 -f 옵션을 두 번 사용하십시오.

-f- git 구성 변수 clean.requireforce가 false로 설정되지 않으면 -f, -n 또는 -i가 주어지지 않는 한 git clean은 실행을 거부합니다.

다음은 정기적으로 동기화하는 저장소의 포크로 작업하는 경우 실제로는 유일한 솔루션입니다(예:풀 요청)을 다른 저장소와 함께 사용하세요.짧은 답변:포크와 리포크를 삭제하지만 github의 경고를 읽어보세요.

나는 비슷한 문제를 겪었고 아마도 동일하지 않을 수도 있으며 내 솔루션이 이상적이지는 않지만 슬프지만 궁극적으로 효과적입니다.

나는 종종 다음과 같은 git 상태 메시지를 받습니다(최소 2/4개 파일 포함).

$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2var.dats
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/constraint_s2Var.dats
#       modified:   doc/PROJECT/MEDIUM/ATS-constraint/parsing/parsing_s2Var.dats

예리한 눈으로 보면 이러한 파일에 경우에 대비해 단일 문자인 도플갱어가 있다는 것을 알 수 있습니다.어쨌든, 무엇이 나를 이 경로로 이끌었는지 전혀 모릅니다(업스트림 저장소에서 직접 이 파일을 작업하지 않았기 때문에). 이 파일을 전환했습니다.이 페이지(및 기타 페이지)에 나열된 여러 해결 방법을 시도해 보았지만 도움이 되지 않은 것 같습니다.

포크된 저장소와 모든 로컬 저장소를 삭제하고 다시 포크하여 문제를 해결할 수 있었습니다.이것만으로는 충분하지 않았습니다.업스트림에서는 문제의 파일 이름을 새 파일 이름으로 바꿔야 했습니다. 커밋되지 않은 작업이 없고, 위키가 없고, 업스트림 저장소에서 발생하는 문제가 없다면 괜찮을 것입니다.업스트림은 당신에게 별로 만족하지 않을 수도 있습니다.내 문제는 의심할 여지 없이 git에 능숙하지 않기 때문에 사용자 오류이지만 git 문제를 해결하는 것이 쉽지 않다는 사실도 마찬가지입니다.

스태시를 다른 사람에게 양도하고 싶을 때:

# add files
git add .  
# diff all the changes to a file
git diff --staged > ~/mijn-fix.diff
# remove local changes 
git reset && git checkout .
# (later you can re-apply the diff:)
git apply ~/mijn-fix.diff

[편집] 설명대로 숨김 이름을 지정할 수 있습니다.음, 숨겨둔 것을 공유하고 싶다면 이것을 사용하세요 ;)

설명적인 방식으로 수행 방법을 설명하는 고유한 별칭을 만들 수 있습니다.

변경 사항을 삭제하려면 다음 별칭을 사용합니다.


작업 트리에 있는 파일(들)의 변경 사항을 취소합니다.

discard = checkout --

그런 다음 모든 변경 사항을 취소하기 위해 다음과 같이 사용할 수 있습니다.

discard .

아니면 그냥 파일:

discard filename

그렇지 않고 모든 변경 사항과 추적되지 않은 파일도 삭제하려면 체크아웃과 정리를 혼합하여 사용합니다.

작업 트리에서 변경 사항과 추적되지 않은 파일을 정리하고 삭제합니다.

cleanout = !git clean -df && git checkout -- .

따라서 사용법은 다음과 같이 간단합니다.

cleanout

이제 많은 별칭이 포함된 다음 Github 저장소에서 사용할 수 있습니다.

준비된 모든 파일이 실제로 커밋된 경우 분기를 간단히 재설정할 수 있습니다.세 번의 마우스 클릭만으로 GUI에서: 나뭇가지, 초기화, !

그래서 제가 실제로 원치 않는 로컬 변경 사항을 되돌리기 위해 자주 하는 일은 모든 좋은 내용을 커밋한 다음 브랜치를 재설정하는 것입니다.

좋은 내용이 단일 커밋으로 커밋된 경우 궁극적으로 조금 다르게 커밋하고 싶다면 "마지막 커밋 수정"을 사용하여 다시 Staged 또는 Unstaged로 되돌릴 수 있습니다.

이는 귀하가 찾고 있는 문제에 대한 기술적 솔루션이 아닐 수도 있지만 매우 실용적인 솔루션이라고 생각합니다.이를 통해 단계화되지 않은 변경 사항을 선택적으로 취소하고, 마음에 들지 않는 변경 사항을 재설정하고, 변경한 사항은 유지할 수 있습니다.

요약하자면, 저는 단순히 저지르다, 분기 재설정, 그리고 마지막 커밋 수정.

하위 모듈이 있고 다른 솔루션이 작동하지 않는 경우 다음을 시도하십시오.

  • 문제(아마도 "더러운" 사례)가 무엇인지 확인하려면 다음을 사용하세요.

    git diff

  • 숨김을 제거하려면

    git submodule update

파일이 항상 스테이지되지 않은 이상한 상황이 있었는데, 이를 해결하는 데 도움이 되었습니다.

git rm .git속성
자식 추가 -A
자식 재설정 --하드

파일 수정을 배제하는 것이 거의 불가능하다면 이를 무시하는 것을 고려해 보셨나요?이 설명이 맞고 개발 중에 해당 파일을 건드리지 않으려면 다음 명령이 유용할 수 있습니다.

git update-index --assume-unchanged file_to_ignore

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top