git init
실행한 프로젝트가 있습니다. 몇 번 커밋한 후 모든 것이 최신 상태이며 로컬 변경 사항이 없다고 git status
그러다가 몇 번 연속으로 변화를 주면서 모든 것을 버리고 원래의 상태로 돌아가고 싶다는 생각을 했습니다. 이 명령이 나에게 도움이 될까요?
git reset --hard HEAD
질문자 :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
참고: 다음을 실행할 수도 있습니다.
git clean -fd
같이
git reset --hard
추적되지 않은 파일은 제거하지 않습니다. git-clean은 추적된 루트 디렉터리에서 git 추적 아래에 있지 않은 모든 파일을 제거합니다. 경고 - 이것에 주의하십시오! 먼저 git-clean으로 테스트 실행을 실행하여 삭제할 항목을 확인하는 것이 좋습니다.
이것은 또한 오류 메시지가 나타날 때 특히 유용합니다.
~"performing this command will cause an un-tracked file to be overwritten"
이것은 여러 작업을 수행할 때 발생할 수 있습니다. 하나는 작업 복사본을 업데이트하는 것인데, 하나는 당신과 당신의 친구가 같은 이름의 새 파일을 추가했지만 그가 먼저 소스 제어에 커밋했고 당신은 추적되지 않은 복사본을 삭제하는 데 신경 쓰지 않습니다. .
이 상황에서 테스트 실행을 수행하면 덮어쓸 파일 목록을 표시하는 데 도움이 됩니다.
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
과 동일하지만 실행 취소할 수 있습니다.모든 변경 사항을 되돌리고 현재 원격 마스터를 최신 상태로 유지하려면(예를 들어 마스터 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.
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
많은 답변을 읽고 시도한 후에 때로는 작업 복사본을 완전히 정리하지 못하는 다양한 극단적인 경우를 발견했습니다.
다음은 항상 작동하는 현재 bash 스크립트입니다.
#!/bin/sh git reset --hard git clean -f -d git checkout HEAD
작업 복사본 루트 디렉터리에서 실행합니다.
단순히 실행 -
git stash
모든 로컬 변경 사항이 제거됩니다. 나중에 실행하여 사용할 수도 있습니다.
git stash apply
DANGER AHEAD: (댓글을 읽으십시오. 내 답변에 제안된 명령을 실행하면 원하는 것보다 더 많이 삭제할 수 있습니다.)
실행해야 했던 디렉토리를 포함한 모든 파일을 완전히 제거하려면
git clean -f -d
나는 비슷한 문제를 만났다. 해결책은 git log
를 사용하여 원격 커밋과 다른 로컬 커밋 버전을 찾는 것입니다. (예: 버전은 3c74a11530697214cbcc4b7b98bf7a65952a34ec
).
그런 다음 git reset --hard 3c74a11530697214cbcc4b7b98bf7a65952a34ec
를 사용하여 변경 사항을 되돌립니다.
비슷한 문제로 검색해보니
로컬 커밋을 버리고 싶었습니다.
아래도 마찬가지였습니다.
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번에서 처음 복제된 상태로 돌아갑니다.
작업 디렉토리에 작업/파일을 숨길 필요는 없지만 대신 완전히 제거하면 됩니다. 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`
로컬 브랜치에서 커밋되지 않은 모든 변경 사항을 되돌리려면 이것을 시도하십시오.
$ 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
여기에 다른 옵션을 추가합니다.
나는 제목을 언급하고 있습니다 : 로컬 변경 사항 되돌리기.
커밋을 위해 준비되지 않은 변경 사항에도 적용될 수 있습니다.
이 경우 다음을 사용할 수 있습니다.
git restore <file>
이전 상태로 돌아가려면.
최상위 프로젝트 디렉토리에 있는 경우 다음을 시도하십시오.
git restore .
그렇지 않은 경우 다음을 사용하십시오.
git restore :/
하위 집합에 대한 로컬 변경 사항을 되돌리려면 다음을 수행합니다.
git restore :/
git restore .
git restore '*.c'
자세한 내용은 git restore 설명서 를 참조하십시오.
추적되지 않은 파일을 제거하려면: git clean -f
이 질문은 더 광범위한 저장소 재설정/되돌리기에 관한 것이지만 개별 변경 사항을 되돌리는 데 관심이 있는 경우에 대비하여 여기에 비슷한 답변을 추가했습니다.
https://stackoverflow.com/a/60890371/2338477
질문에 대한 답변:
git 기록에 변경 사항을 유지하거나 유지하지 않고 개별 변경 사항을 되돌리는 방법
이전 버전으로 돌아가서 동일한 상태에서 다시 시작하는 방법
모든 변경 사항을 삭제하려면 git checkout .
더 빠르고 간단합니다.
출처 : http:www.stackoverflow.com/questions/1146973/how-do-i-revert-all-local-changes-in-git-managed-project-to-previous-state
Git을 사용하여 이전 커밋에서 분기 (0) | 2021.11.30 |
---|---|
복사 및 교환 관용구는 무엇입니까? (0) | 2021.11.30 |
HTML의 id 속성에 유효한 값은 무엇입니까? (0) | 2021.11.30 |
Linux에서 echo의 출력 색상을 변경하는 방법 (0) | 2021.11.30 |
Python에서 정적 클래스 변수가 가능합니까? (0) | 2021.11.30 |