내가 실행 한 프로젝트가 git init
있습니다. 여러 번 커밋 한 후에 git status
모든 것이 최신 상태이며 로컬 변경 사항이 없다고 말했습니다.
그런 다음 몇 가지 연속적인 변경을 수행하고 모든 것을 버리고 원래 상태로 돌아가고 싶다는 것을 깨달았습니다. 이 명령이 저에게 도움이됩니까?
git reset --hard HEAD
내가 실행 한 프로젝트가 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 checkout .
및 git reset [--hard HEAD]
작동하지 않았다, 나는해야했다 git clean -fd
나의 변화를 되돌릴.
git reset
변경 사항을 재설정하지 않습니다 git reset --hard
.
참고 : 실행하고 싶을 수도 있습니다
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
build 빌드 파일과 같이 나열된 파일 / 디렉토리를 삭제합니다..gitignore
다음은 내가 잊어 버린 다른 명령입니다.
git clean --force -d -x
git reset --hard
.gitignore
build 빌드 파일과 같이 나열된 파일 / 디렉토리를 삭제합니다..gitignore
git clean --force -d -x
.gitignore
build 빌드 파일과 같이 나열된 파일 / 디렉토리를 삭제합니다..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 -r b c
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
위와 동일 하지만 실행 취소 할 수 있습니다git clean -f -d -x
: -x 옵션을 지정하면 무시 된 파일도 제거됩니다. 예를 들어, 모든 빌드 제품을 제거하는 데 유용 할 수 있습니다.
모든 변경 사항을 되돌리고 현재 원격 마스터를 최신 상태로 유지하려면 (예를 들어, 마스터 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.
origin
하는 것이 중요해 보입니다. git reset --hard origin/master
– (없이 git reset --hard
) 아무것도 바뀌지 않는 것 같습니다.
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 b c d e; 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
git rebase -i
이 잘못되었습니다 (편집 실수로 커밋을 지우는 것으로 끝났습니다). 이 팁 덕분에 나는 좋은 상태로 돌아 왔습니다!
위험 미리보기 : (주석을 읽으십시오. 내 답변에서 제안한 명령을 실행하면 원하는 것보다 더 많이 삭제 될 수 있습니다)
내가 실행 해야하는 디렉토리를 포함한 모든 파일을 완전히 제거하려면
git clean -f -d
많은 답변을 읽고 시도한 후 때로는 작업 복사본을 완전히 정리하지 못하는 다양한 경우를 발견했습니다.
여기에 현재 bash 스크립트가 있습니다. 항상 작동합니다.
#!/bin/sh
git reset --hard
git clean -f -d
git checkout -- HEAD
작업 사본 루트 디렉토리에서 실행하십시오.
error: pathspec 'HEAD' did not match any file(s) known to git.
git checkout HEAD
git reset --hard
추적 된 파일을 되돌 리거나 (단계적 또는하지 않음) git clean -f -d
추적 되지 않은 파일을 제거합니다. git checkout -- HEAD
왜 필요한가요?
비슷한 문제를 검색했습니다.
지역 커밋을 버리고 싶었습니다.
아래도 마찬가지였습니다.
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
이이를 수행합니다.
이 작업을 수행하는 일반적인 사용 사례는 병합 또는 외부 도구로 생성 된 크래프트 를 제거 하거나 다른 파일을 제거하여 깨끗한 빌드를 실행할 수 있습니다.
이 명령은 추적되지 않는 로컬 작업 디렉토리에서 파일을 제거하도록 설계되었으므로이 명령에 매우주의해야합니다. 이 명령을 실행 한 후 갑자기 마음이 바뀌면 제거 된 파일의 내용을 다시 볼 수 없습니다. 더 안전한 대안은 실행하는 것입니다.
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
이 질문은 더 넓은 저장소 재설정 / 되돌리기에 관한 것이지만 개별 변경 사항을 되 돌리는 데 관심이있는 경우 비슷한 대답을 여기에 추가했습니다.
https://stackoverflow.com/a/60890371/2338477
질문에 대한 답변 :
git history에서 변경 유지 여부에 관계없이 개별 변경 사항을 되 돌리는 방법
같은 상태에서 다시 시작하기 위해 이전 버전으로 돌아가는 방법
git checkout path/to/file
path/to/file