git pull을 취소하는 방법?


238

원격 원점에서 원치 않는 커밋으로 인해 git pull을 취소하고 싶지만 재설정 해야하는 개정판을 모르겠습니다.

git이 원격 원점을 당기기 전에 어떻게 상태로 돌아갈 수 있습니까?


4
참고 사항 : git fetch upstream먼저 유용한 정보를 찾은 다음 git diff upstream/branch병합 할 대상을 간단히 살펴보십시오 . 모든 것이 잘된다면git merge upstream/branch
Shahbaz

1
힙 스터 브로 그래머가 GUI에서 git 명령 을 수행 하지만 GitHub Desktop 아톰 에 안전하고, 간단한 버튼이 undo쉽고 명확하게 무대 unstage 파일을 커밋하고 확인란을. GUI도 사람들입니다!
Dem Pilafian 2016 년

답변:


391

또는 다른 답변보다 더 명시 적으로 만들려면 :

git pull 

으악?

git reset --keep HEAD@{1}

1.7.1 이전의 git 버전에는 없습니다 --keep. 그러한 버전을 사용하면 사용할 수 --hard있지만 로컬 변경 사항이 손실되므로 위험한 작업입니다.


해설자에게

ORIG_HEAD는 위험한 행동이있는 명령으로 쉽게 되돌릴 수 있도록 이전 HEAD 상태입니다. Git에 리플 로그가 있으므로 이제는 유용하지 않습니다 : HEAD @ {1}은 ORIG_HEAD와 거의 같습니다 (HEAD @ {1}은 항상 HEAD의 마지막 값이고 ORIG_HEAD는 위험한 작동 전 HEAD의 마지막 값입니다)


2
HEAD @ {1}과 HEAD ^의 차이점은 무엇입니까?
hugemeow

7
@hugemeow 좋은 질문입니다. 한편 man git-rev-parse이것을 설명합니다. HEAD@{1}심볼의 이전 값 HEAD있는 reflog반면는 HEAD^제 (제)는 상위 버전 전류 HEAD. 이 둘은 동일 할 필요가 없습니다 (예 : 리베이스, 하드 리셋, 분기 스위치 등). reflog에 대한 링크 된 기사를 읽으십시오. 건배
sehe

10
PowerShell 사용자는 백틱으로 대괄호를 피하십시오.git reset HEAD@`{1`}
Robert Claypool

3
ss64.com/ps/syntax-esc.html 나는 당신이 타이핑하고 싶었다고 생각한다 HEAD@`{1`}. 또는 그 문제에 대해서도 POSIX 쉘에서 작동하는 것을한다.'HEAD@{1}'
sehe

2
나는 그것이 풀을 재설정 할뿐만 아니라 내 커밋 = (
falsarella

67

git reflog showHEAD의 역사를 보여 주어야합니다. 이를 사용하여 이전의 위치를 ​​파악할 수 있습니다 pull. 그럼 당신은 그 커밋을 할 수 reset있습니다 HEAD.


git reflog show가 다음과 같은 출력을 주었다 : c9e5e4d HEAD @ {0} : pull : 빨리 감기 1c86a22 HEAD @ {1} : pull origin master : 빨리 감기 05c141a HEAD @ {2} : 끌어 오기 : 빨리 감기 HEAD를 HEAD로 안전하게 재설정 할 수 있습니까 @ {1}
Kartins 2016

sehe의 다른 답변에는 도착 방법에 대한 세부 정보가 있습니다.
Noufal Ibrahim

이것은 비참한 커밋이 어떻게 든 내 역사에 병합 커밋을 산재시킨 후에 매우 유용했습니다. reflog에서 마지막으로 알려진 상품을 찾은 다음 강제로 밀어냅니다.
Domenic

어떤 경우 pull첫 번째 조치는 무엇입니까? 경우 pull에있다 HEAD@{1}, 그리고 다른 그 전에 아무것도, 당신은 어떻게 그 전에 상태로 복귀하지 않습니다?
Hendra Uzia

저장소를 다시 작성 하시겠습니까?
누팔 이브라힘

29

이것은 나를 위해 일했습니다.

git reset --hard ORIG_HEAD 

병합을 취소하거나 가져 오십시오.

$ git pull                         (1)
Auto-merging nitfol
CONFLICT (content): Merge conflict in nitfol
Automatic merge failed; fix conflicts and then commit the result.
$ git reset --hard                 (2)
$ git pull . topic/branch          (3)
Updating from 41223... to 13134...
Fast-forward
$ git reset --hard ORIG_HEAD       (4)

이 체크 아웃 : HEAD와 ORIG_HEAD을 힘내에 이상.


17

<SHA#>당신이 가고 싶은 커밋을 찾으십시오 . github에서 또는 명령 줄 git log이나 입력하여 찾을 수 있습니다.git reflog showgit reset --hard <SHA#>


커밋을 위해 무엇을 찾으십니까?
Martin

죄송합니다, 수정했습니다<SHA#>
Nina

이것은 내가 무언가를 취소해야 할 때 가장 많이 사용하는 명령입니다
Kartins

2

에서 https://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree

병합 작업을 취소하거나 더러운 작업 트리 내부로 가져 오기

$ git pull           (1)
Auto-merging nitfol
Merge made by recursive.
 nitfol               |   20 +++++----
 ...
$ git reset --merge ORIG_HEAD      (2)

작업 트리에서 로컬로 수정 한 경우에도 안전하게 말할 수 있습니다. git pull 다른 분기의 변경 사항이 해당 변경 사항과 겹치지 않는다는 것을 알면 있습니다.

병합 결과를 검사 한 후 다른 지점의 변경 사항이 만족스럽지 않을 수 있습니다. 실행 git reset --hard ORIG_HEAD 하면 원래 위치로 돌아갈 수 있지만 원하지 않는 로컬 변경 사항은 삭제됩니다. git reset --merge로컬 변경 사항을 유지합니다.

참조 https://stackoverflow.com/a/30345382/621690


감사! 당신은 내 일 저장
티아고 마틴
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.