[git] 자식 풀 실행 취소, 저장소를 오래된 상태로 만드는 방법

git pull을 되돌 리거나 취소하여 git pull을 수행하기 전에 이전 소스 / 레포지토리가 이전 상태가되도록하는 방법이 있습니까? 그렇게하고 싶지 않은 파일을 병합했지만 나머지 파일은 병합하기 때문에이 작업을 수행하고 싶습니다. 그래서 그 파일을 다시 가져오고 싶습니다. 가능합니까?

편집 : 설명을 위해 git merge를 실행 취소하고 싶습니다. 몇 가지 답변을 본 후 나는 이것을했다.

git reflog
bb3139b... HEAD@{0}: pull : Fast forward
01b34fa... HEAD@{1}: clone: from ...name...

이제 어떻게해야합니까? 이렇게 git reset --hard OK는? 다시 나사로 고정하고 싶지 않으므로 자세한 단계를 요구합니까?



답변

Running git pull은 다음 작업을 순서대로 수행합니다.

  1. git fetch
  2. git merge

병합 단계는 구성에서 병합되도록 설정된 분기를 결합합니다. 병합 단계 를 실행 취소하려고 하지만 가져 오기 는 수행하지 않을 것입니다 (많은 의미가 없으며 필요하지 않아야 함).

병합 을 취소하려면을 사용 git reset --hard하여 로컬 저장소를 이전 상태로 재설정하십시오. git-reflog 를 사용 하여 이전 상태의 SHA-1을 찾은 다음 재설정하십시오.

경고

이 섹션에 나열된 명령은 커밋되지 않은 모든 변경 사항을 제거하여 잠재적으로 작업 손실을 초래합니다.

git reset --hard

또는 다음과 같은 특정 시점으로 재설정하십시오.

git reset --hard master@{"10 minutes ago"}


답변

jkp의 답변과 동일하지만 다음은 전체 명령입니다.

git reset --hard a0d3fe6

a0d3fe6은 다음을 수행하여 찾을 수 있습니다.

git reflog

실행 취소하려는 지점을보고


답변

병합을 취소하는보다 현대적인 방법은 다음과 같습니다.

git merge --abort

그리고 조금 오래된 방법 :

git reset --merge

이전 답변에서 설명한 구식 방법 (경고 : 모든 로컬 변경 사항을 버립니다) :

git reset --hard

그러나 실제로는 그것이 주어진 git merge --abort것과 동등한 것에 주목할 가치 가 있습니다. 이것은 git help for merge 명령에서 읽을 수 있습니다.git reset --mergeMERGE_HEAD

git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.

더있을 때 실패한 병합 한 후 MERGE_HEAD, 실패한 병합으로 취소 할 수 없다 git reset --merge반드시으로하지만 git merge --abort, 그들은 같은 일에 대한 이전 및 새 구문뿐만 아니라 그래서 . 이것이 git reset --merge제가 일상 업무에서 훨씬 더 유용한 이유 입니다.


답변

그것은 처음 사용합니다 : git reflog

이전 상태의 SHA를 찾고 확인하십시오 (HEAD @ {1}은 예입니다)

git reset --hard HEAD@{1}


답변

gitk ( “gitk –all from git command line”을 실행 해 보자)가 있다면 간단하다. 실행하고 롤백하려는 커밋 (마우스 오른쪽 버튼 클릭)을 선택하고 “마스터 브랜치를 여기로 재설정”을 선택하십시오. 커밋되지 않은 변경 사항이 없으면 “하드”옵션을 선택하십시오.


답변

$COMMIT수행하기 전에 마지막 커밋 ID 라고 가정하십시오 git pull. 마지막 당김을 취소하려면

git reset --hard $COMMIT

.

보너스:

끌어 당김에 대해 흥미로운 트릭을 나누고 싶습니다.

git pull --rebase

이 위의 명령은 내 자식 생활에서 가장 유용한 명령으로 많은 시간을 절약했습니다.

새로 커밋을 서버에 푸시하기 전에이 명령을 시도하면 최신 서버 변경 사항 (페치 + 병합)을 자동으로 동기화하고 커밋을 git log의 맨 위에 놓습니다. 수동 풀 / 병합에 대해 걱정할 필요가 없습니다.

자세한 내용은 http://gitolite.com/git-pull–rebase를 참조하십시오.


답변

변경 사항을 가져 오는 가장 쉬운 방법입니다.

** Warning **

새로 만든 파일과 폴더가 삭제되므로 변경된 파일을 백업하십시오 .

git reset --hard 9573e3e0

9573e3e0{커밋 ID}는 어디에 있습니까