Git에서 스테이지되지 않은 변경 사항을 어떻게 폐기합니까?


4817

색인에없는 작업 사본의 변경 사항을 어떻게 폐기합니까?


9
git-clean작업 트리에서 추적되지 않은 파일 만 제거합니다. git-scm.com/docs/git-clean
Yega

24
위의 Asenar의 의견을 명확히 git-clean -df하면 위험 할 수 있습니다. 추적되지 않은 로컬 파일을 삭제합니다 (예 : .gitignore로 덮여 있음) 아래 내용을 모두 읽고 git checkout을 고려하십시오. 대신
jacanterbury

15
'git clean -df'경고! 나는 그것을 시도하고 복원 할 수없는 키 폴더를 잃어 버렸습니다 ... 아야!
Gabe Karkanis

46
때리는 git status방법에 대한 제안을 제공합니다! git checkout -- .
Paulo

4
@Paulo : 2019 년 7 월부터 git status제안 : git restore. git restore이 목적을위한 새로운 명령입니다. 내 2019 업데이트를 참조하십시오 .
prosoitos

답변:


2684

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

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

--include-untracked철저하고 싶지 않다면 포함시킬 필요 가 없습니다.

그런 git stash drop다음 원하는 경우 명령을 사용하여 해당 숨김을 삭제할 수 있습니다 .


122
그리고 그것에 대해 철저히하기를 원할 --include-untracked것입니다.
TJ Crowder

9
@KarimSamir :이 질문 은 인덱스에없는 변경 사항에 대해 구체적으로 묻습니다 . 이 git reset명령은 인덱스의 변경 사항도 삭제합니다.
Greg Hewgill

146
git checkout-. 훨씬 빠름
Frank

38
어느 쪽도 아니 git stash, 아니다의 다양한 git checkoutunstaged 삭제를 폐기하지 않습니다. 의 결과에 따르면 git status, 실제 정답은 약간의 맛입니다.git reset HEAD
Chris Warth

127
이것은 숨김 스택을 오염시킵니다. git checkout -- .하나의 명령으로 만 작업을 수행합니다.
Felipe Tonello

5336

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

git checkout -- .

특정 파일 사용 :

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

--인수 모호성 을 제거하려면 여기를 클릭하십시오 .


117
이것은 git 표준 방식 인 것 같습니다. 즉, git이 타이핑 할 때 지시하는 내용git status
ABMagil

27
추적되지 않은 파일이 있으면 작동하지 않습니다. 힘내 말한다 error: The following untracked working tree files would be overwritten by checkout: ....
Michael Iles

92
초보자 질문, "git checkout-." 의미 적으로 의미합니까?
kaid

120
@Ninjack git checkout -- .git checkout .지점 이름을 지정하지 않았다는 사실에 대해 명시 적이라는 점을 제외하고 와 같은 의미 입니다. 둘 다 내가 현재 '.'에있는 지점의 HEAD 버전을 체크 아웃한다고 말합니다 또는 './'. 당신이 경우 git checkout branch-name directory-or-file-name일반적으로, 당신의 HEAD 버전을 얻을 directory-or-file-name분기를 branch-name.
akgill 2009 년

23
IMO이 변형은 변경 사항을 정리할 때 변경된 저장소가 HEAD 개정에없는 상황을 처리하지 않고 HEAD로 업데이트하지 않고 변경 사항 만 정리하려고하므로 불완전합니다.
alexykot

1898

완전한 해결책은 다음과 같습니다.

git clean -df
git checkout -- .

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


116
다른 두 가지 답변은 실제로 작동하지 않습니다.
존 헌트

18
@dval 이것은 첫 번째 명령이 색인화되지 않은 파일을 제거하고 두 번째 명령은 색인화되지 않은 파일의 색인화되지 않은 변경 사항을 제거했기 때문입니다. 따라서 단계적 변경 사항이 git reset --hard
없는

3
추적되지 않은 디렉토리가 git clone 인 경우 -dff를 사용 하십시오 .
accuya

87
git clean -df를 조심스럽게 실행하십시오. 그것이 무엇인지 이해하지 못하면 robots.txt, 업로드 된 파일 등과 같이 보관하려는 파일을 삭제하고있을 수 있습니다.
ctlockey

40
@ctlockey가 말했듯이 첫 번째 명령 은 무시 된 파일로만 구성된 디렉토리삭제합니다 ... 내 프로젝트에서 구성 파일을 모두 잃어 버렸습니다 : (주의하십시오.
Maxime Lorant

326

현재 디렉토리의 현재 색인을 검사하여 현재 디렉토리에서 파일의 모든 변경 사항을 아래쪽으로 버립니다.

git checkout .

또는 이것은 인덱스에서 모든 파일을 체크 아웃하여 작업 트리 파일을 덮어 씁니다.

git checkout-index -a -f

28
안녕, 차이 무엇 git checkout .git checkout -- .?
Evan Hu

5
@Evan :이 경우에는 차이가 없습니다.
Robert Siemer

10
@Robert Siemer와 일반적인 경우?
RJFalconer

2
@Evan :이 질문을하기에 나쁜 곳. – OP의 문제와 관련이 없으며 여기의 답변과 관련이 없습니다.
Robert Siemer 2016 년

14
+1 일부 파일의 단계적 변경 비 단계적 변경 이 모두있는 경우를 올바르게 처리하므로 올바른 답변 입니다. 이 솔루션은 준비되지 않은 변경 사항을 무시합니다. 그것들을 유지하려면 @ greg-hewgill의 대답을 사용해야합니다 git stash save --keep-index.
Rhubbarb 2016 년

248
git clean -df

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

-d: 추적되지 않은 파일 외에 추적되지 않은 디렉토리 제거

-f: 힘 ( clean.requireForce설정 에 따라 필요하지 않을 수 있음 )

git help clean설명서를 보려면 실행


이 답변에 모든 투표권이없는 이유는 무엇입니까? 2011 년에 답변을했지만 여전히 정확합니다.
Eugene Braginets

106

내가 가장 좋아하는 것은

git checkout -p

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

또한보십시오:

git add -p

9
삭제하기 전에 실제 변경 사항을 볼 수있는 기능이 마음에 듭니다.
Penghe Geng 2019

이것이 내가 사용하는 것입니다. git checkout -p 다음에 "a"를 모두 적용하십시오.
Mattis

2
나는 한번도 생각해 본 적이 없다. 이는 -p추가적인 안전 층을 추가합니다. git clean -d실제로 OP에 응답하려면이 옵션을 결합하십시오 .
Stephan Henningsen

96

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

git clean -dfx
git checkout .

사용 된 git clean옵션에 대한 온라인 도움말 텍스트입니다 .

-d

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

-f

망할 놈의 구성 변수가있는 경우 clean.requireForce로 설정되지 않은 false, 힘내 깨끗한 주어진하지 않는 파일이나 디렉토리를 삭제하는 것을 거부합니다 -f, -n또는 -i. Git은 .git서브 디렉토리 또는 파일 내의 디렉토리 삭제를 거부합니다 -f.

-x

.gitignore(디렉토리 당) 및 의 무시 규칙을 사용하지 말고 옵션 $GIT_DIR/info/exclude과 함께 제공된 무시 규칙을 계속 사용하십시오 -e. 이를 통해 빌드 제품을 포함하여 추적되지 않은 모든 파일을 제거 할 수 있습니다. 이것은 git reset깨끗한 빌드를 테스트하기 위해 깨끗한 작업 디렉토리를 만드는 데 사용될 수 있습니다 (와 함께 사용 가능 ).

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


이 솔루션의 +1 "git checkout. repo의 루트에서 수행되어야한다"는 당신의 말과 관련하여, git reset --hard대신 우리가 대신 할 수 있다고 언급 할 수 있습니까? (실제로 git reset --hard HEAD현재 디렉토리와 동일 하고 작동해야합니다 ...)
ErikMD

2
또한 첫 번째 명령과 관련하여 git clean -dfx다음을 실행 git clean -d -x -n하기 전에 안전한면에 사용하는 팁이 있습니다. 이전 실행하고 제거 할 파일 목록을 표시 한 다음 실행하여 작업을 확인하십시오 git clean -d -x -f(인수를 입력하십시오) -n, -f터미널에서 빠르게 변경할 수 있도록하기 위해 마지막에 다시 설명)
ErikMD

5
이것은 되돌릴 수 없다는 점에 유의하십시오. 파일이 .gitignore있으면 손실됩니다. 따라서이 전에 프로젝트를 백업하십시오.
Rob

69

기존 파일에 대한 변경 사항제거 하려면 checkout( 여기 문서화 됨 )을 사용 하십시오 .

git checkout -- .
  • 분기가 지정되지 않았으므로 현재 분기를 체크 아웃합니다.
  • 이중 하이픈 ( --)은 Git에 분기의 사양을 건너 뛰었다는 것을 두 번째 인수 (경로)로 가져와야한다는 것을 Git에 알려줍니다.
  • 마침표 ( .)는 모든 경로를 나타냅니다.

당신이 원하는 경우 추가 된 파일 제거하기 위해 마지막 커밋 이후를 사용 clean( 여기 문서화 ) :

git clean -i 
  • -i옵션은 대화식을 시작하여 clean실수로 인한 삭제를 방지합니다.
  • 더 빠른 실행을 위해 몇 가지 다른 옵션을 사용할 수 있습니다. 설명서를 참조하십시오.

당신이 원하는 경우 나중에 액세스를위한 보유 공간 이동의 변화 , 사용 stash( 여기 문서화 ) :

git stash
  • 모든 변경 사항은 나중에 액세스 할 수 있도록 Git 's Stash로 이동합니다.
  • 미묘한 스 태싱을 위해 몇 가지 옵션을 사용할 수 있습니다. 설명서를 참조하십시오.

이렇게하면 변경 사항이 정확하게 변환되고 이전 커밋에서 새로 추가 된 파일이 삭제됩니다.
Yohan Chung

설명을 위해 이것을 찬성했습니다 :)
Archie G. Quiñones

62

나는이 기사가 어떤 명령을 언제 사용 해야하는지 설명하는 데 도움이된다는 것을 실제로 발견했습니다 .

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

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

    git checkout -- foo.txt

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

    git reset -- foo.txt

git stash조금 덜 위험하기 때문에 사용하는 것이 인기있는 선택 이라고 생각합니다 . git reset을 사용할 때 실수로 너무 많이 날리면 언제든지 다시 돌아갈 수 있습니다. 재설정은 기본적으로 재귀 적입니다.

자세한 내용은 위 기사를 참조하십시오.


60

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

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

git checkout -- .

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

git 명령에서 추적되지 않은 파일의 숨김은 다음을 사용하여 수행됩니다.

git stash -u

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


19
내가 여기 두 번 와서이 답변을 읽고 .마지막에 잊어 버렸습니다 . 나에게 미래 : 기간은 필수입니다 !
bejado

2
다른 모든 변경 사항을 없애지 않고 하위 디렉토리의 모든 로컬 변경 사항을 제거해야했습니다. 이 답변은 큰 도움이되었습니다
Ally

2
두 명령이 무엇을하는지 설명하십시오. 설명이없는 것은 정말 도움이되지 않습니다.
Chris Kennedy

2
우수한. 체크 아웃은 하나의 명령으로 가장 인기있는 것이 두 가지로 수행합니다. git clean -fd인덱스에없는 파일을 정리 하기 위해 후속 조치를 취할 수도 있습니다 .
oligofren의

49

준비되지 않은 변경 사항을 유지하지 않으려는 경우 (특히 준비된 변경 사항이 새 파일 인 경우)이 기능이 유용하다는 것을 알았습니다.

git diff | git apply --reverse

44

git checkout -f


man git-checkout:

-f, --force

분기를 전환 할 때 색인 또는 작업 트리가 HEAD와 다른 경우에도 진행하십시오. 로컬 변경 사항을 버리는 데 사용됩니다.

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


2
이것은 인덱스의 변화를 버릴 것입니다 !! (그리고 OP는 그대로 두어야합니다.)
Robert Siemer

44

git status를 입력하면 ( "git checkout-..."을 사용하여 작업 디렉토리의 변경 사항을 버립니다) 표시됩니다.

예 : git checkout -- .


1
모든 파일을 빠르게 버리는 데 도움이되지 않기 때문에 다운 보트되었습니다. 세 개의 점은 모든 파일을 나열해야 함을 나타냅니다. 예를 들어 많은 양의 파일을 한 번에 버려야하는 경우 특히 나쁩니다. 당신은 유지하려면 모든 수정 사항을 개최 한 후에 큰 병합시
USR-로컬 ΕΨΗΕΛΩΝ

2
물론 올바른 명령은 "git checkout-"입니다. 하나의 점. 이 의견에서, 세 개의 점은 문법적인 것으로, 사용될 수있는 다른 많은 옵션이 있음을 나타냅니다.
Josef.B

39

git stash를 사용할 수 있습니다-무언가 잘못되면 여전히 숨김에서 되돌릴 수 있습니다. 여기에있는 다른 답변과 비슷하지만이 파일은 준비되지 않은 모든 파일과 모든 준비되지 않은 삭제도 제거합니다.

git add .
git stash

모든 것이 정상인지 확인하면 은신처를 버립니다.

git stash drop

Bilal Maqsood의 답변 git clean도 나에게 도움이되었지만 숨은 자세로 더 많은 통제력을 얻었습니다. 실수로 잘못하면 여전히 변경 사항을 되돌릴 수 있습니다

최신 정보

나는 1 가지 더 변화가 있다고 생각합니다 (이전에 왜 그것이 효과가 있었는지 모르겠습니다).

git add . -A 대신에 git add .

없이 -A제거 된 파일은 개최되지 않습니다


38

2019 년 업데이트 :

20197 월 부터 정확하게 다음을 수행하는 새로운 명령이 git restore있습니다.

에서 git statusGit은이 명령을 사용하는 대신 사용하는 것이 좋습니다 git checkout.

이 명령을 사용하여 작업 트리를 특정 커밋으로 복원하거나 색인의 내용을 복원 할 수도 있지만 기본적으로 작업 트리는 색인의 상태 (여기에서 요청 된 상태)로 복원됩니다.

따라서 경로 지정과 일치하는 파일을 복원하려면 (단계별되지 않은 변경 사항 제거) 다음을 수행하십시오.

git restore <pathspec>

예를 들어, 현재 디렉토리에서 모든 비 단계적 변경 사항을 복원하려면 다음을 실행할 수 있습니다.

git restore .

프로젝트의 루트에서이를 실행하면 전체 리포지토리의 모든 단계적 변경 사항이 복원됩니다.

참고 것을처럼 git checkout -- .(MARIUSZ 노박에 의해 지적 아웃으로), 파일이 의지 만 폐기 변화는 망할 놈의 추적 및 새로운 비 추적 파일을 삭제하지 않습니다. 추적되지 않은 새 파일을 포함하여 준비되지 않은 변경 사항을 삭제하려면 추가로 실행할 수 있습니다.

git clean -df

그러나 제거하지 않으려는 파일을 버릴 수 있으므로이 나중 명령에 매우주의하십시오.


참고 사항 git restore: 이것은 새로운 명령이므로 맨 페이지 에 경고가 표시됩니다.

이 명령은 실험적입니다. 동작이 변경 될 수 있습니다.

따라서 향후 동작이 변경되면이 답변이 오래 될 수 있습니다. 따라서 man git-restore사용하기 전에 빨리 실행하는 것이 좋습니다 .


2
새로 추가 된 파일에 영향을주지 않고 스테이지가없는 변경 사항 만 되돌리려 고했기 때문에 git restore .완벽하게 작동했습니다. 감사.
Saurabh Misra

3
나는했고 git restore <filename>완벽하게 작동했습니다.
멀린

1
나를 위해 잘 작동했습니다.
Prometheus

1
매뉴얼 페이지에 따르면 git restore .전체 저장소가 아닌 현재 디렉토리의 모든 파일을 복원합니다.
jarno

1
네 말이 맞아 감사! 방금 테스트 한 결과 실제로 그렇습니다. 그러나 재귀 적입니다. 따라서 프로젝트의 루트에서 실행하면 전체 저장소에 적용됩니다. 답변을 편집하겠습니다.
prosoitos

35

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

그래서 내가 자식 재설정 할 때 그들이 거기에 앉지 않도록하기 위해이 작업을 수행합니다 (나중에-출발지 / 지점 이름에서 gitignores 제외)

참고 : 아직 추적되지 않았지만 GITIGNORE에서는 파일을 유지하지 않으려면 원격 저장소에서 찾을 수없는 추적되지 않은 파일 (@XtrmJosh 덕분에)을 지우므로이 단계를 건너 뛰어도됩니다.

git add --all

그럼 내가

git fetch --all

그런 다음 원점으로 재설정

git reset --hard origin/branchname

그것은 다시 정사각형으로 되돌릴 것입니다. 지사를 다시 복제하는 것과 마찬가지로 모든 지정된 파일을 로컬에 보관합니다.

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

git reset --hard @{u}

이것이 내가 선호하는 옵션이지만 왜 모든 변경 사항을 먼저 추가합니까? 내가 아는 한 git reset --hard를 사용하는 동안 Git 파일의 디렉토리 목록을 수정하면 디렉토리가 여전히 제거되는 동안 어쨌든 손실됩니다.
XtrmJosh

Mac 또는 Linux에서는 github windows powershell이 ​​재설정 후 파일을 남기는 경우가 있습니다. git reset은 repo의 모든 파일을 원래 상태로 설정하기 때문에 생각합니다. 추가하지 않으면 건드리지 않습니다. 그러면 데스크톱 클라이언트는 "이 파일이 여기 있고 커밋해야합니다"
Nick Nick

센스가 있습니다. 나는 Windows를 사용하지 않으므로 그 문제를 보지 못했습니다 (최소 몇 개월 동안 Windows를 사용하지 않았지만 그 전에는 많이 기억하지 마십시오-후회 할 수있는 큰 흐림입니다). :) 메인 대답에 근거를 주목할 가치가있을 수도 있습니다
XtrmJosh

나는 지금도 Mac 에서이 문제를 겪었습니다. 파일이 Repo에서 추적되지 않으면 때로는 git reset이 파일을 건드리지 않습니다. 실제로 "WHY"를 분리 할 수는 없지만,이 경우 재설정하면 여전히 커밋되지 않은 파일 1 개 또는 2 개가 있습니다. --all을 추가하고 다시 재설정합니다.
Nick

2
처럼이 I의 좋은 작은 변화 git reset --hard @{u}에 지점을 재설정 현재의 원격 추적 브랜치는 어디든지
user2221343

31

위의 모든 솔루션을 시도했지만 아직 준비되지 않은 새 파일을 제거 할 수 없습니다.

git clean -f새 파일을 제거하는 데 사용하십시오 . 강제 옵션에 유의하십시오.


21

간단히 말해

git stash

모든 로컬 변경 사항이 제거됩니다. 당신은 또한 말함으로써 나중에 사용할 수 있습니다

git stash apply 

또는 자식 숨김 팝


21

그냥 사용하십시오 :

git stash -u

끝난. 쉬운.

당신이 경우 정말 감춰 스택에 관심 당신은에 따를 수 있습니다 git stash drop. 그러나 그 시점에서 (Mariusz Nowak에서) 사용하는 것이 좋습니다.

git checkout -- .
git clean -df

그럼에도 불구하고, 하나의 명령으로git stash -u 모든 추적 및 추적되지 않은 변경 사항을 "삭제"하므로 가장 좋습니다 . 그러나 단지를 파기 변경 및 추적 만 폐기 추적 된 변경 ... 그리고 두 명령을 입력하는 것은 지금까지 너무 많은 작업 :)git checkout -- .git clean -df


참고 : git stash -u것입니다 곧 (망할 놈의 2.14.x / 2.15, Q3 2017) 약간의 진화 : stackoverflow.com/a/46027357/6309
VonC

OP의 질문을 받으면 색인 파일을 보관해야합니다. 비 단계 변경 만 제거해야합니다. git stash -k내 의견에 있어야합니다 .
스냅

21

영구 삭제를 수행하려면 git reset --hard

나중에 변경 사항을 저장하려면 다음을 수행하십시오. git stash


16

이것은 디렉토리에도 작동합니다. 일반적인 자식 권한 외부.

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

최근에 나에게 일어난


그러나 자식이 무시한 내용은 원래 권한을 유지하지 않습니다! 따라서 보안 위험이 발생할 수 있습니다.
twicejr

@twicejr 틀 렸습니다. git help clean"-d 추적되지 않은 파일 외에 추적되지 않은 디렉토리를 제거하십시오." 를 읽어보십시오 .
GlassGhost

왜 모든 파일을 월드 읽기 / 쓰기로 설정 했습니까? 좋은 습관이 아닙니다.
Ghoti

@Ghoti 내 나쁜, 664 정확합니까? 또한 답변을 편집 할 수 있습니다.
GlassGhost

모든 권한을 664로 설정하면 프로젝트에 어떤 종류의 권한이 필요한지에 대한 많은 가정이 있습니다. 그 명령의 일부를 사용하면 일부 사람들에게 문제가 발생할 것이라고 생각합니다.
ianrandmckenzie


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

12

제 생각에는

git clean -df

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

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

기술

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

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

선택적 ... 인수가 제공되면 해당 경로 만 영향을받습니다.

옵션

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

-f --force Git 구성 변수 clean.requireForce가 false로 설정되지 않은 경우, -f, -n 또는 -i를 지정하지 않으면 git clean이 실행을 거부합니다.


11

리포지토리 상태에 관계없이 언제든지 이전 커밋으로 재설정 할 수 있습니다.

git reset --hard <commit hash>

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


2
또한 OP가 요구하는 것 이상으로 색인의 모든 내용을 삭제합니다.
Linus Arver

10

git clean -df보다 더 구체적인 새 파일을 제거하는 또 다른 방법은 (일부 파일을 완전히 제거 할 수는 없지만) 새 파일을 먼저 색인에 추가 한 다음 숨겨 놓는 것입니다. 숨기는 장소.

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


9

다음은 다른 리포지토리와 정기적으로 동기화 (예 : 풀 요청)하는 리포지토리 포크로 작업하는 경우 실제로 솔루션 일뿐입니다. 짧은 대답 : 포크와 포크를 삭제하지만 github의 경고를 읽으십시오 .

비슷한 문제가 있었는데 아마도 동일하지는 않았으며 솔루션이 이상적이지 않다는 것이 슬프지만 궁극적으로 효과적입니다.

나는 종종 다음과 같은 자식 상태 메시지를 가질 것이다 (적어도 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

예리한 눈은이 파일들에 대해 도피 레그 레거를 가지고 있다는 사실에 주목할 것입니다. 어쨌든,이 경로로 내려 가서 무엇을 시작했는지 알지 못합니다 (업스트림 저장소에서 직접 이러한 파일로 작업하지 않았기 때문에).이 파일을 전환했습니다. 이 페이지 (및 다른 페이지)에 나열된 많은 솔루션을 사용해보십시오.

분기 저장소와 모든 로컬 저장소를 삭제하고 다시 분기하여 문제를 해결할 수있었습니다. 이것만으로는 충분하지 않았습니다. 업스트림은 해당 파일의 이름을 새 파일 이름으로 바꿔야했습니다. 커밋되지 않은 작업, Wiki 및 업스트림 저장소와 다른 문제가없는 한 괜찮습니다. 상류층은 당신에게 만족하지 않을 수도 있습니다. 내 문제에 관해서는 의심 할 여지없이 git에 능숙하지 않기 때문에 사용자 오류이지만, git 관련 문제를 해결하기가 쉽지 않습니다.


7

숨김을 다른 사람에게 이전하려는 경우 :

# 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

의견대로 주석을 붙일 수 있습니다. 당신이 은닉을 공유하고 싶다면 이것을 사용하십시오.)


5
실제로 Git 숨김은 제목을 가질 수 있습니다. 예를 들어 git stash save "Feature X work in progress".
Colin D Bennett

7

설명적인 방법으로 설명하는 고유 한 별명을 작성할 수 있습니다.

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


작업 트리의 파일 목록에서 변경 사항을 버리십시오.

discard = checkout --

그런 다음 다음으로 사용하여 모든 변경 사항을 버릴 수 있습니다.

discard .

또는 단지 파일 :

discard filename

그렇지 않으면 모든 변경 사항과 추적되지 않은 파일을 모두 삭제하려면 체크 아웃과 정리를 혼합하여 사용하십시오.

작업 트리에서 변경 사항 및 추적되지 않은 파일 정리 및 삭제

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

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

cleanout

이제 다음 Github 저장소에서 많은 별명을 포함하여 사용할 수 있습니다.


7

파일이 항상 준비되지 않은 이상한 상황이 발생하여 해결하는 데 도움이됩니다.

git rm .git은
git add -A
git reset --hard를 나타 냅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.