분기에 대한 모든 변경 사항을 취소하는 방법은 무엇입니까?


116

브랜치 (예 :)에서 작업 중이며 design여러 가지 변경 사항을 적용했지만 모두 삭제하고 리포지토리 버전과 일치하도록 재설정해야합니다. 나는 git checkout design그것을 할 것이라고 생각 했지만 나는 이미 분기에 design있고 3 개의 수정 된 파일이 있음을 알려줍니다 .

이러한 변경 사항을 삭제하고 현재 원격 서버에있는 분기를 가져 오려면 어떻게해야합니까?

답변:


207

참고 :이 작업은 취소수 없습니다 .

git checkout -f이것을 시도 하면 모든 브랜치와 마스터 에서 커밋 되지 않은 로컬 변경 사항이 삭제됩니다 .


86

git reset --hard 는 마지막 커밋 이후 모든 것을 버리고 싶다면 도움이 될 수 있습니다.


6
또는git reset --hard HEAD^
deadfish 2013

28
git reset --hard HEAD^정말로 받아 들여지는 대답이어야합니다. OP는 다른 지점에 대해 묻지 않았습니다.
vphilipnyc

2
나는 이것을 시도했고, 마지막 커밋뿐만 아니라 마지막 푸시 이후 모든 것을 삭제했다고 생각합니다.
Chase Roberts

3
git reset --hard HEAD ^ 시도했지만 여전히 추적되지 않은 파일이 많이 남았습니다. 이제 하나의 간단한 명령으로 제거하는 방법을 Google에 알려드립니다.
John Deighan 2018

20
git diff master > branch.diff
git apply --reverse branch.diff

이러한 단계는 특정 분기의 상태를 마스터 분기와 동일하게 설정하는 것이 목표 인 경우 매우 유용 할 수 있습니다. 이렇게하려면 특정 브랜치 내에서 실행 한 다음 사용이 완료되면 [branch name] .diff 파일을 삭제합니다.git rm [branch name].diff
karolus

18

변경 사항을 원하지 않고design 리모트의 브랜치와 정확히 일치하기를 원한다면 브랜치를 삭제하고 다시 생성 할 수도 있습니다.

# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design            # Will set up design to track origin's design branch

7
또한 : git checkout design; git reset --hard origin / design
Dan

또한 삭제 지점 전에 커밋 것
Asarluhi

리모트에 있지 않은 로컬 브랜치에 커밋이 있다면 이것은 제 생각에 정말 혼란스러운 상황에 빠지기위한 레시피입니다. 이 솔루션을 사용 하지 않을 것 입니다.
erewok

1
@erewok : 질문은 질문자가 모든 변경 사항을 버리고 싶다고 구체적으로 말합니다.
mipadi

그리고 나는이 대답이 그것을 달성한다고 생각하지 않습니다.
erewok jul.

7

@Will, git immersion 은 정말 멋지고 간단한 git 튜토리얼입니다. 다음과 같은 경우 변경 사항을 실행 취소하는 방법을 보여줍니다. 실습 14-18


2
나는 1 년이 지난 지금 git immersion ..을 끝냈다 고 말하고 싶습니다. OI! 이 작업을 더 빨리 수행 했어야
Will

1
이 요구는 Ruby항상 선택하지 않는 것 installed..which 할 수
비슈누

5

로컬 브랜치의 변경 사항을 삭제하려면 git stash 명령을 사용하여 이러한 변경 사항을 숨길 수 있습니다.

git stash save "some_name"

변경 사항이 저장되고 나중에 원할 경우 검색하거나 삭제할 수 있습니다. 이렇게하면 브랜치에 커밋되지 않은 코드가 없으며 git pull을 사용하여 메인 브랜치에서 최신 코드를 가져올 수 있습니다.


4

소스 루트에서 : git reset ./ HEAD <--un-stage any staged changes git checkout ./ <--discard any unstaged changes


0

모든 변경 사항을 취소하는 REVERSIBLE 방법 :

나는 병합을 한 후 바로 체크 아웃 하는 것을 잊은 후에이 질문을 발견 했습니다. 당신은 그것을 짐작했습니다 : 나는 master에서 직접 몇 개의 파일을 수정하기 시작했습니다 . 오! 내 상황이 거의 독특하지 않기 때문에 (우리는 모두 해봤지만;->), 모든 변경 사항을 취소하는 데 사용했던 되돌릴 수있는 방법을 제공합니다. 마스터가 다시 개발하는 것처럼 보이입니다.

git diff수정 된 파일을 확인하고 오류 범위를 평가하기 위해 a 를 수행 한 후 다음을 실행했습니다.

git stash
git stash clear

먼저 모든 변경 사항을 숨긴 후 다음으로 지워졌습니다. 오류가있는 파일에 대한 모든 변경 사항마스터이 사라지고 패리티가 복원되었습니다.

이제 이러한 변경 사항을 복원하고 싶다고 가정 해 보겠습니다. 할 수 있어요. 첫 번째 단계는 방금 지웠거나 삭제 한 숨김의 해시를 찾는 것입니다.

git fsck --no-reflog | awk '/dangling commit/ {print $3}'

해시를 학습 한 후 다음을 사용하여 커밋되지 않은 변경 사항을 성공적으로 복원했습니다.

git stash apply hash-of-cleared-stash

저는 이러한 변경 사항을 복원하고 싶지 않았고, 복원 할 수 있는지 확인하고 싶었 기 때문에 다시 지 웠습니다.

또 다른 옵션은 변경 사항을 지우는 대신 숨김을 다른 분기적용하는 것입니다. 따라서 잘못된 브랜치에서 작업 한 변경 사항을 지우는 측면에서stash 에서 복구 할 수있는 많은 유연성을 제공합니다.

Anyhoo, 분기의 변경 사항을 지우는 가역적 수단을 원한다면이 사용 사례에서 전술 한 방법은 덜 위험한 방법입니다.


-1

git checkout -f

이것은 귀하의 질문에 충분합니다. 일단 완료되면 완료됩니다. 취소 할 수 없습니다.

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