programing

Git의 단계별 변경을 취소하려면 어떻게 해야 합니까?

elecom 2023. 5. 28. 19:58
반응형

Git의 단계별 변경을 취소하려면 어떻게 해야 합니까?

색인에 없는 작업 복사본의 변경사항을 삭제하려면 어떻게 해야 합니까?

현재 작업 디렉토리에 있는 모든 준비되지 않은 파일에 대해 다음을 사용합니다.

git restore .

특정 파일의 경우:

git restore path/to/file/to/revert

것과함께그께.git switchgit checkout(여기 참조), 따라서 인수의 모호성을 제거합니다.

파일에 준비된 변경사항과 준비되지 않은 변경사항이 모두 있는 경우에는 에 표시된 준비되지 않은 변경사항만git diff반환됩니다.에 표시된 변경 사항git diff --staged손상되지 않은 채로

Git 2.23 이전

현재 작업 디렉토리에 있는 모든 준비되지 않은 파일의 경우:

git checkout -- .

특정 파일의 경우:

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

--여기서 모호성을 제거합니다(이것을 인수 모호성이라고 함).

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

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

을 포함할 는 없습니다.--include-untracked당신이 그것에 대해 철저하게 하고 싶지 않다면.

그 후에, 당신은 그 저장고를 떨어뜨릴 수 있습니다.git stash drop원한다면 명령합니다.

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

git clean -df
git checkout -- .

경고: .gitignore에 직접 언급된 무시된 파일은 삭제되지 않지만,git clean -df 폴더에 있는 무시된 파일을 삭제할 수 있습니다.

git clean 추적되지 않은 모든 파일을 제거합니다.git checkout준비되지 않은 모든 변경 내용을 지웁니다.

이렇게 하면 현재 디렉터리에 대한 현재 인덱스가 체크아웃되어 현재 디렉터리의 모든 파일 변경 내용이 아래쪽으로 삭제됩니다.

git checkout .

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

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

현재 디렉터리에서 시작하여 버전 제어 하에 있지 않은 파일을 재귀적으로 제거하여 작업 트리를 치료합니다.

-d되지 않은 되지 않은 를 제거합니다.

-f에(힘)에 하지 않을 수 )clean.requireForce설정)

려달을 합니다.git help clean

2019년 업데이트

이제 다음을 사용하여 추적된 하나의 파일에서 단계별 변경사항을 삭제할 수 있습니다.

git restore <file>

현재 디렉터리에 있는 모든 추적된 파일에서 다음을 사용합니다.

git restore .

리포지토리의 루트에서 후자를 실행하면 프로젝트의 추적된 모든 파일에서 단계별 변경 내용이 삭제됩니다.

메모들

  • git restore2019년 7월에 도입되었으며 버전 2.23에서 분할의 일부로 출시되었습니다.git checkout를 의명령로에 합니다.git restore 및 파일의 git switch가지치기용의
  • git checkout여전히 예전처럼 작동하고 이전 답변은 완벽하게 유효합니다.
  • 을 할 때git status 사항과 , 그것들을 을 제안하는 것입니다. (에 Git는 Git를 사용합니다.)git checkout -- <file>v2.23 이전 하게 됩니다.
  • 와 마찬가지로git checkout -- .이렇게 하면 추적된 파일의 변경 내용만 삭제됩니다.따라서 Mariusz Nowak의 답변은 여전히 적용되며 추적되지 않은 파일을 포함하여 단계별 변경 사항을 모두 취소하려면 그의 제안대로 추가로 실행할 수 있습니다.git clean -df.

제가 가장 좋아하는 것은

git checkout -p

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

참고 항목:

git add -p

내가 사용하는 정확한 옵션 조합을 제시하는 답변이 없기 때문에 다음과 같습니다.

git clean -dxn .  # dry-run to inspect the list of files-to-be-removed
git clean -dxf .  # REMOVE ignored/untracked files (in the current directory)
git checkout -- . # ERASE changes in tracked files (in the current directory)

▁the▁▁text▁for▁used다▁this에 대한 온라인 도움말 텍스트입니다.git clean옵션:

-d

추적되지 않은 파일 외에 추적되지 않은 디렉토리도 제거합니다.추적되지 않은 디렉터리가 다른 Git 리포지토리에서 관리되는 경우 기본적으로 제거되지 않습니다.사용하다-f이러한 디렉터리를 제거하려면 옵션을 두 번 선택합니다.

-x

표무 사용안에서 읽은 .gitignore) 및 (디렉토리당) »$GIT_DIR/info/exclude하지만 여전히 주어진 무시 규칙을 사용합니다.-e제품을 되지 않은 모든 파일을 할 수 .이렇게 하면 빌드 제품을 포함하여 추적되지 않은 모든 파일을 제거할 수 있습니다.이 기능은 다음과 함께 사용할 수 있습니다(가능성 있음).git reset깨끗한 빌드를 테스트하기 위해 기본 작업 디렉터리를 만듭니다.

-n

실제로 아무것도 제거하지 말고, 무엇을 할 것인지 보여주기만 하면 됩니다.

-f

변수 Git 구인 경우수성변경clean.requireForce으로 설정되지 않음false은 Gitclean이 지정되지 않은 합니다.-f,-n또는-iGit는 다음 내의 디렉토리 삭제를 거부합니다..git 파일, 두 번째 디렉터리 또는 파일이 아닌 -f주어집니다.

기존 파일의 변경 사항만 제거하려는 경우checkout(여기에 표시됨).

git checkout -- .
  • 분기가 지정되지 않았으므로 현재 분기를 체크아웃합니다.
  • 하이픈이중이하픈(▁the픈이이하▁()--번째 인수), 을 알려줍니다.) Git다 음 경 같 과 인 로 번 야 한 는 말 즉 해 니 다 합 건 분 지 니 다 뜁 너 기 을 정 의 고 다 사 용 수 에 은 것 을 로 째 두 ▁) ▁tells ▁g 건 니 다 뜁 분 너 지 ) ▁g path 을 기 정 ), ▁(
  • 기간(기▁the.는 경로를 .은 모든 경로를 나타냅니다.

마지막 커밋 이후 추가된 파일을 제거하려면 다음을 사용합니다.clean(여기에 표시됨):

git clean -i 
  • -i 옵이을시니다합작대형을 합니다.clean잘못된 삭제를 방지합니다.
  • 더 빠른 실행을 위해 몇 가지 다른 옵션을 사용할 수 있습니다. 설명서를 참조하십시오.

나중에 액세스할 수 있도록 변경사항을 보류 공간으로 이동하려면 다음을 사용합니다.stash(여기에 표시됨):

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

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

이 명령은 작업 디렉토리의 변경 사항을 취소하는 데 사용됩니다.

git checkout -- .

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

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

git stash -u

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

이 기사는 다음 명령을 사용하는 시기를 설명하는 데 도움이 된다는 것을 알게 되었습니다. http://www.szakmeister.net/blog/2011/oct/12/reverting-changes-git/

몇 가지 다른 사례가 있습니다.

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

    git checkout -- foo.txt

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

    git reset -- foo.txt

는 는하것이의다니됩심을 사용하는 것이 스럽습니다.git stash조금 덜 위험하기 때문에 인기 있는 선택입니다.Git reset을 사용할 때 실수로 너무 많이 날려버리면 언제든지 되돌아갈 수 있습니다.기본적으로 재설정은 재귀적입니다.

더 많은 조언을 위해 위의 기사를 보세요.

스테이징되지 않은 변경사항(특히 스테이징된 변경사항이 새 파일인 경우)을 유지하는 데 관심이 없는 경우 다음과 같은 작업이 유용합니다.

git diff | git apply --reverse

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

git checkout -- .

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

git add .
git stash

모든 것이 정상인지 확인하는 경우, 보관함을 폐기합니다.

git stash drop

은 빌랄막드답변은의우스▁the은답변▁from▁answer▁bil빌랄▁with의.git clean저를 도 효과가 , 저는 그 으로 더 통제력을 갖게 - 제가 실수로 , 제 수 . 실수로 무언가를 수행하더라도 여전히 변경 사항을 되돌릴 수 있습니다.

갱신하다

한 가지 변경 사항이 더 있다고 생각합니다(이전에는 왜 이것이 저에게 효과가 있었는지 모르겠습니다).

git add . -Agit add .

없이-A.

git checkout -f


man git-checkout:

-f, --force

분기 전환 시 인덱스 또는 작업 트리가 HEAD와 다른 경우에도 계속 진행합니다.이것은 로컬 변경사항을 버리는 데 사용됩니다.

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

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

따라서 이 작업은 Git 재설정(나중에 - 오리진/지점 이름에서 Git 무시 제외) 시 해당 위치에 있지 않도록 하기 위해 수행됩니다.

참고: GITIGNNORE에서 아직 추적되지 않은 파일을 보관하려면 이 단계를 건너뛰어야 합니다. 원격 저장소에서 찾을 수 없는 추적되지 않은 파일을 삭제합니다(@XtrmJosh 감사합니다).

git add --all

그럼 나는

git fetch --all

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

git reset --hard origin/branchname

그것은 그것을 원점으로 돌려놓을 것입니다.모든 Git 무시된 파일을 로컬 및 제자리에 유지하면서 분기를 다시 복제하는 것과 마찬가지로

아래 사용자별 설명 업데이트:사용자가 있는 현재 분기로 재설정하기 위한 변형입니다.

git reset --hard @{u}

위의 모든 솔루션을 사용해 보았지만 스테이징되지 않은 새 파일을 제거할 수 없었습니다.

사용하다git clean -f새 파일을 제거하는 것 - 하지만 조심하세요!force 옵션을 확인합니다.

하기: 영구삭수는방법하행를제방법▁a.git reset --hard

할 내용 하기: 나에사수변있경내용록도용git stash

그냥 사용:

git stash -u

됐어, 진정해요

만약 당신이 당신의 스택에 정말 관심이 있다면, 당신은 그것을 따를 수 있습니다.git stash drop하지만 그 시점에서 (Mariusz Nowak의) 사용하는 것이 더 낫습니다.

git checkout -- .
git clean -df

그럼에도 불구하고, 나는 좋아합니다.git stash -u한 번의 명령으로 추적 및 추적되지 않은 모든 변경사항을 "회피"하기 때문에 최상의 성능을 제공합니다.아직git checkout -- .추적된 변경 사항만 삭제합니다.git clean -df추적되지 않은 변경 사항만 삭제합니다.그리고 두 명령을 모두 입력하는 은 너무 많은 일입니다 :)

직언하면

git stash

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

git stash apply 

오르깃 스태쉬 팝

git 명령을 있습니다.git checkout .

보고서 상태에 관계없이 항상 이전 커밋으로 재설정할 수 있습니다.

git reset --hard <commit hash>

이렇게 하면 해당 커밋 후 변경된 내용이 모두 삭제됩니다.

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

일반 Git 권한을 벗어난 디렉토리에서도 작동합니다.

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

최근에 나에게 일어난 일

제 생각에는,

git clean -df

그 묘기를 부려야 합니다.Git Clean에 대한 Git 설명서에 따름

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

묘사

현재 디렉터리에서 시작하여 버전 제어 하에 있지 않은 파일을 재귀적으로 제거하여 작업 트리를 치료합니다.

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

선택적인 ... 인수를 지정하면 해당 경로만 영향을 받습니다.

옵션들

-d 추적되지 않은 파일 외에 추적되지 않은 디렉터리도 제거합니다.추적되지 않은 디렉터리가 다른 Git 리포지토리에서 관리되는 경우 기본적으로 제거되지 않습니다.이러한 디렉터리를 제거하려면 -f 옵션을 두 번 사용합니다.

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

git clean -df보다 구체적인 새 파일을 제거하는 또 다른 방법은 새 파일을 인덱스에 먼저 추가한 다음 저장한 다음 저장을 삭제하는 것입니다.

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

파일이 항상 스테이징되지 않는 이상한 상황이 발생했습니다. 이 문제를 해결하는 데 도움이 됩니다.

특성gitrm.git 파일
add - Agit add - A
git reset --hard

다음은 다른 저장소와 정기적으로 동기화(예: 요청 꺼내기)하는 저장소의 포크로 작업하는 경우에만 해결책이 됩니다.간단한 대답: 포크와 포크를 삭제하지만 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

예민한 눈으로 이 파일들이 꺼질 경우를 대비해 한 글자로 된 도플갱어를 가지고 있다는 것에 주목할 것입니다.어찌된 영문인지, 무엇부터 시작해야 할지 모르겠습니다. (업스트림 레포에서 직접 이 파일들로 작업하지 않았기 때문에) 이 파일들을 전환했습니다.이 페이지(및 다른 페이지)에 나열된 많은 솔루션을 사용해 보십시오.

분기된 저장소와 모든 로컬 저장소를 삭제하고 다시 포킹하여 문제를 해결할 수 있었습니다. 이것만으로는 충분하지 않았습니다. 업스트림에서는 문제의 파일 이름을 새 파일 이름으로 변경해야 했습니다.커밋되지 않은 작업이나 Wiki, 업스트림 저장소에서 벗어나는 문제가 없는 한 괜찮습니다.업스트림은 적어도 당신에게 별로 만족하지 않을 수 있습니다.저의 문제에 대해서는 git에 그다지 능숙하지 않기 때문에 의심할 여지 없이 사용자의 오류이지만, git의 문제를 해결하는 것이 결코 쉽지 않다는 사실 또한 지적합니다.

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

다음 별칭을 사용하여 변경 사항을 취소합니다.


작업 트리의 파일(목록)에서 변경 내용 삭제

discard = checkout --

그런 다음 다음 다음과 같이 사용하여 모든 변경 내용을 삭제할 수 있습니다.

discard .

또는 파일만 사용할 수도 있습니다.

discard filename

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

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

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

다음과 같이 간단하게 사용할 수 있습니다.

cleanout

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

파일의 수정을 배제하는 것이 거의 불가능하다면, 파일을 무시하는 것을 고려해 보셨습니까?이 설명이 올바르고 개발 중에 이러한 파일을 만지지 않을 경우 다음 명령이 유용할 수 있습니다.

git update-index --assume-unchanged file_to_ignore

언급URL : https://stackoverflow.com/questions/52704/how-do-i-discard-unstaged-changes-in-git

반응형