etc./StackOverFlow

Git 관리 프로젝트의 모든 로컬 변경 사항을 이전 상태로 되돌리려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2021. 11. 30. 23:59
반응형

질문자 :Jacques René Mesrine


git init 실행한 프로젝트가 있습니다. 몇 번 커밋한 후 모든 것이 최신 상태이며 로컬 변경 사항이 없다고 git status

그러다가 몇 번 연속으로 변화를 주면서 모든 것을 버리고 원래의 상태로 돌아가고 싶다는 생각을 했습니다. 이 명령이 나에게 도움이 될까요?

 git reset --hard HEAD


작업 복사본에 대한 변경 사항을 되돌리려면 다음을 수행하십시오.

 git checkout .

인덱스에 대한 변경 사항(즉, 추가한 것)을 되돌리려면 이렇게 하십시오. 경고하면 푸시되지 않은 모든 커밋이 마스터로 재설정됩니다! :

 git reset

커밋한 변경 사항을 되돌리려면 다음과 같이 하십시오.

 git revert <commit 1> <commit 2>

추적되지 않은 파일(예: 새 파일, 생성된 파일)을 제거하려면:

 git clean -f

또는 추적되지 않은 디렉터리(예: 새 디렉터리 또는 자동으로 생성된 디렉터리):

 git clean -fd

1800 INFORMATION

참고: 다음을 실행할 수도 있습니다.

 git clean -fd

같이

 git reset --hard

추적되지 않은 파일은 제거하지 않습니다. git-clean은 추적된 루트 디렉터리에서 git 추적 아래에 있지 않은 모든 파일을 제거합니다. 경고 - 이것에 주의하십시오! 먼저 git-clean으로 테스트 실행을 실행하여 삭제할 항목을 확인하는 것이 좋습니다.

이것은 또한 오류 메시지가 나타날 때 특히 유용합니다.

 ~"performing this command will cause an un-tracked file to be overwritten"

이것은 여러 작업을 수행할 때 발생할 수 있습니다. 하나는 작업 복사본을 업데이트하는 것인데, 하나는 당신과 당신의 친구가 같은 이름의 새 파일을 추가했지만 그가 먼저 소스 제어에 커밋했고 당신은 추적되지 않은 복사본을 삭제하는 데 신경 쓰지 않습니다. .

이 상황에서 테스트 실행을 수행하면 덮어쓸 파일 목록을 표시하는 데 도움이 됩니다.


Antony Stubbs

다시 복제

 GIT=$(git rev-parse --show-toplevel) cd $GIT/.. rm -rf $GIT git clone ...
  • 푸시되지 않은 로컬 커밋 삭제
  • 추적 파일에 대한 변경 사항을 되돌립니다.
  • 삭제한 추적 파일 복원
  • .gitignore 나열된 파일/디렉터리 삭제(예: 빌드 파일)
  • .gitignore 없는 파일/디렉토리를 삭제합니다.
  • 이 접근법을 잊지 못할 것입니다.
  • 대역폭 낭비

다음은 내가 매일 잊어버리는 다른 명령입니다.

청소 및 재설정

 git clean --force -d -x git reset --hard
  • 푸시되지 않은 로컬 커밋 삭제
  • 추적 파일에 대한 변경 사항을 되돌립니다.
  • 삭제한 추적 파일 복원
  • .gitignore 나열된 파일/디렉터리 삭제(예: 빌드 파일)
  • .gitignore 없는 파일/디렉토리를 삭제합니다.

깨끗한

 git clean --force -d -x
  • 푸시되지 않은 로컬 커밋 삭제
  • 추적 파일에 대한 변경 사항을 되돌립니다.
  • 삭제한 추적 파일 복원
  • .gitignore 나열된 파일/디렉터리 삭제(예: 빌드 파일)
  • .gitignore 없는 파일/디렉토리를 삭제합니다.

초기화

 git reset --hard
  • 푸시되지 않은 로컬 커밋 삭제
  • 추적 파일에 대한 변경 사항을 되돌립니다.
  • 삭제한 추적 파일 복원
  • .gitignore 나열된 파일/디렉터리 삭제(예: 빌드 파일)
  • .gitignore 없는 파일/디렉토리를 삭제합니다.

노트

위의 모든 것을 확인하기 위한 테스트 케이스(bash 또는 sh 사용):

 mkdir project cd project git init echo '*.built' > .gitignore echo 'CODE' > a.sourceCode mkdir b echo 'CODE' > b/b.sourceCode cp -rbc git add . git commit -m 'Initial checkin' echo 'NEW FEATURE' >> a.sourceCode cp a.sourceCode a.built rm -rf c echo 'CODE' > 'd.sourceCode'

또한보십시오

  • 이전 커밋을 취소하는 새 커밋을 만들기 위해 git revert
  • git checkout (먼저 위의 명령을 실행해야 할 수 있음)
  • git stash git reset 과 동일하지만 실행 취소할 수 있습니다.

William Entriken

모든 변경 사항을 되돌리고 현재 원격 마스터를 최신 상태로 유지하려면(예를 들어 마스터 HEAD가 분기된 이후로 이동했고 푸시가 '거부'되고 있음을 발견한 경우) 다음을 사용할 수 있습니다.

 git fetch # will fetch the latest changes on the remote git reset --hard origin/master # will set your local branch to match the representation of the remote just pulled down.

Michael Durrant

git-reflog를 살펴보십시오. 기억하는 모든 상태를 나열하며(기본값은 30일) 원하는 상태를 간단히 체크아웃할 수 있습니다. 예를 들어:

 $ git init > /dev/null $ touch a $ git add . $ git commit -m"Add file a" > /dev/null $ echo 'foo' >> a $ git commit -a -m"Append foo to a" > /dev/null $ for i in bcde; do echo $i >>a; git commit -a -m"Append $i to a" ;done > /dev/null $ git reset --hard HEAD^^ > /dev/null $ cat a foo b c $ git reflog 145c322 HEAD@{0}: HEAD^^: updating HEAD ae7c2b3 HEAD@{1}: commit: Append e to a fdf2c5e HEAD@{2}: commit: Append d to a 145c322 HEAD@{3}: commit: Append c to a 363e22a HEAD@{4}: commit: Append b to a fa26c43 HEAD@{5}: commit: Append foo to a 0a392a5 HEAD@{6}: commit (initial): Add file a $ git reset --hard HEAD@{2} HEAD is now at fdf2c5e Append d to a $ cat a foo b c d

William Pursell

많은 답변을 읽고 시도한 후에 때로는 작업 복사본을 완전히 정리하지 못하는 다양한 극단적인 경우를 발견했습니다.

다음은 항상 작동하는 현재 bash 스크립트입니다.

 #!/bin/sh git reset --hard git clean -f -d git checkout HEAD

작업 복사본 루트 디렉터리에서 실행합니다.


Scott Davey

단순히 실행 -

 git stash

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

 git stash apply

piyushmandovra

DANGER AHEAD: (댓글을 읽으십시오. 내 답변에 제안된 명령을 실행하면 원하는 것보다 더 많이 삭제할 수 있습니다.)

실행해야 했던 디렉토리를 포함한 모든 파일을 완전히 제거하려면

 git clean -f -d

Tobias Gassmann

나는 비슷한 문제를 만났다. 해결책은 git log 를 사용하여 원격 커밋과 다른 로컬 커밋 버전을 찾는 것입니다. (예: 버전은 3c74a11530697214cbcc4b7b98bf7a65952a34ec ).

그런 다음 git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec 를 사용하여 변경 사항을 되돌립니다.


Patrick

비슷한 문제로 검색해보니

로컬 커밋을 버리고 싶었습니다.

  1. 리포지토리 복제(git clone)
  2. dev 분기로 전환(git checkout dev)
  3. 커밋이 거의 없음(git commit -m "commit 1")
  4. 그러나 이러한 로컬 커밋을 버리고 원격(origin/dev)으로 돌아가기로 결정했습니다.

아래도 마찬가지였습니다.

 git reset --hard origin/dev

확인하다:

 git status On branch dev Your branch is up-to-date with 'origin/dev'. nothing to commit, working tree clean

이제 로컬 커밋이 손실되고 위의 1번에서 처음 복제된 상태로 돌아갑니다.


Manohar Reddy Poreddy

작업 디렉토리에 작업/파일을 숨길 필요는 없지만 대신 완전히 제거하면 됩니다. git clean 명령이 이 작업을 수행합니다.

이를 수행하는 몇 가지 일반적인 사용 사례는 병합 또는 외부 도구에 의해 생성된 cruft 를 제거하거나 깨끗한 빌드를 실행할 수 있도록 다른 파일을 제거하는 것입니다.

이 명령은 추적되지 않은 파일을 로컬 작업 디렉토리에서 제거하도록 설계되었기 때문에 이 명령에 대해 매우 주의해야 합니다. 이 명령을 실행한 후 갑자기 마음이 바뀌면 제거된 파일의 내용을 다시 볼 수 없습니다. 더 안전한 대안은 실행하는 것입니다

git stash --all

모든 것을 제거하지만 모든 것을 숨김에 저장합니다. 이 보관함은 나중에 사용할 수 있습니다.

그러나 진정으로 모든 파일을 제거하고 작업 디렉토리를 정리하려면 다음을 실행해야 합니다.

git clean -f -d

이렇게 하면 명령의 결과로 항목이 없는 모든 파일과 모든 하위 디렉터리가 제거됩니다. git clean -f -d 명령을 실행하기 전에 해야 할 현명한 일은 다음을 실행하는 것입니다.

 git clean -f -d -n

git clean -f -d 실행 후 제거될 항목의 미리보기를 표시합니다.

가장 공격적인 것부터 가장 덜 공격적인 것까지 옵션을 요약하면 다음과 같습니다.


옵션 1 : 모든 파일을 로컬에서 제거(가장 공격적)

 git clean -f -d

옵션 2 : 위의 영향 미리보기(가장 공격적인 미리보기)

 git clean -f -d -n

옵션 3 : 모든 파일을 숨김(최소 공격적)

 `git stash --all`

jbooker

로컬 브랜치에서 커밋되지 않은 모든 변경 사항을 되돌리려면 이것을 시도하십시오.

 $ git reset --hard HEAD

그러나 다음과 같은 오류가 표시되는 경우:

 fatal: Unable to create '/directory/for/your/project/.git/index.lock': File exists.

'.git' 폴더로 이동한 다음 index.lock 파일을 삭제할 수 있습니다.

 $ cd /directory/for/your/project/.git/ $ rm index.lock

마지막으로 다음 명령을 다시 실행합니다.

 $ git reset --hard HEAD

Janderson Silva

여기에 다른 옵션을 추가합니다.

나는 제목을 언급하고 있습니다 : 로컬 변경 사항 되돌리기.
커밋을 위해 준비되지 않은 변경 사항에도 적용될 수 있습니다.

이 경우 다음을 사용할 수 있습니다.

 git restore <file>

이전 상태로 돌아가려면.


RtmY

최상위 프로젝트 디렉토리에 있는 경우 다음을 시도하십시오.

 git restore .

그렇지 않은 경우 다음을 사용하십시오.

 git restore :/

하위 집합에 대한 로컬 변경 사항을 되돌리려면 다음을 수행합니다.

  • 최상위 pathspec 마법으로 모든 작업 트리 파일을 복원합니다. git restore :/
  • 현재 디렉토리의 모든 파일을 복원하십시오: git restore .
  • 파일 유형(예: 모든 C 소스 파일): git restore '*.c'

자세한 내용은 git restore 설명서 를 참조하십시오.

추적되지 않은 파일을 제거하려면: git clean -f


amra

이 질문은 더 광범위한 저장소 재설정/되돌리기에 관한 것이지만 개별 변경 사항을 되돌리는 데 관심이 있는 경우에 대비하여 여기에 비슷한 답변을 추가했습니다.

https://stackoverflow.com/a/60890371/2338477

질문에 대한 답변:

  • git 기록에 변경 사항을 유지하거나 유지하지 않고 개별 변경 사항을 되돌리는 방법

  • 이전 버전으로 돌아가서 동일한 상태에서 다시 시작하는 방법


TarmoPikaro

모든 변경 사항을 삭제하려면 git checkout . 더 빠르고 간단합니다.


lLauriix

출처 : http:www.stackoverflow.com/questions/1146973/how-do-i-revert-all-local-changes-in-git-managed-project-to-previous-state

반응형