[git] ‘git reset –hard HEAD ~ 1’과 ‘git reset –soft HEAD ~ 1’의 차이점은 무엇입니까?

나는 git에서 내 커밋을 취소하려고했습니다. 사용하는 것이 위험 git reset --hard HEAD~1합니까?

에 대한 다른 옵션의 차이점은 무엇입니까 git reset?



답변

git reset소프트, 혼합, 하드, 병합 및 유지의 다섯 가지 “모드”를 알고 있습니다. 일반적으로 접하게되는 모드이므로 처음 세 가지부터 시작하겠습니다. 그 후에는 약간의 보너스를받을 수 있으므로 계속 지켜봐주십시오.

부드러운

사용할 때 git reset --soft HEAD~1현재 분기에서 마지막 커밋을 제거하지만 파일 변경 사항은 작업 트리에 유지됩니다 . 또한 변경 사항은 인덱스에 유지되므로를 따라 git commit가면 이전에 “제거한”커밋과 똑같은 변경 사항이 적용된 커밋이 생성됩니다.

혼합

이것은 기본 모드이며 소프트와 매우 유사합니다. 커밋을 “제거”할 때 git reset HEAD~1변경 사항은 여전히 ​​작업 트리에 유지되지만 인덱스에는 유지되지 않습니다. 따라서 커밋을 “다시 실행”하려면 커밋 git add하기 전에 변경 사항 ( ) 을 추가해야합니다 .

단단한

사용 git reset --hard HEAD~1하면 마지막 커밋에 도입 된 변경 사항 외에도 커밋되지 않은 모든 변경 사항손실됩니다 . 변경 사항은 작업 트리에 유지되지 않으므로 git status명령을 실행하면 저장소에 변경 사항이 없음을 알 수 있습니다.

이것으로 조심스럽게 밟으십시오. 추적하지 않은 커밋되지 않은 변경 사항을 실수로 제거한 경우 git(말 : 커밋되거나 적어도 인덱스에 추가됨)을 사용하여 다시 가져올 방법이 없습니다 git.

보너스

유지

git reset --keep HEAD~1흥미롭고 유용한 것입니다. 현재 HEAD 커밋과 주어진 커밋 이 다른 파일 만 재설정합니다 . 이러한 파일 중 하나라도 커밋되지 않은 변경 사항이있는 경우 재설정을 중단합니다. 기본적으로 더 안전한 버전의 hard.

이 모드는 변경 사항이 많고 이러한 변경 사항을 잃지 않고 다른 분기로 전환하려는 경우 (예 : 잘못된 분기에서 작업을 시작한 경우) 특히 유용합니다.


이에 대한 자세한 내용은 git reset documentation 에서 확인할 수 있습니다 .

참고 커밋을 제거
할 때 git reset커밋은 실제로 손실되지 않으며, 커밋이나 자식을 가리키는 참조가 없습니다. git reset예를 들어,와 같은 명령을 사용하여 SHA-1 키를 찾아서 “삭제”된 커밋을 복구 할 수 있습니다 git reflog.


답변

Git 재설정에는 소프트, 혼합, 병합, 하드, 유지의 5 가지 주요 모드가 있습니다 . 차이점은 헤드, 스테이지 (인덱스), 작업 디렉토리 를 변경하거나 변경하지 않는 것입니다 .

Git reset –hard는 헤드, 색인 및 작업 디렉토리를 변경합니다.

Git reset –soft는 머리 만 변경합니다. 색인, 작업 디렉토리에 대한 변경 사항이 없습니다.

즉, 커밋을 실행 취소하려면 –soft가 충분해야합니다. 그러나 그 후에도 여전히 색인과 작업 디렉토리에 잘못된 커밋으로 인한 변경 사항이 있습니다. 파일을 수정하고, 수정하고, 색인에 추가하고 다시 커밋 할 수 있습니다.

–hard를 사용하면 프로젝트에서 완전히 깨끗한 슬레이트를 얻을 수 있습니다. 마지막 커밋에서 변경 사항이없는 것처럼. 이것이 당신이 원하는 것이라고 확신한다면 앞으로 나아가십시오. 그러나 이렇게하면 마지막 커밋을 완전히 잃게됩니다. (참고 : 손실 된 커밋을 복구하는 방법은 여전히 ​​있습니다.)


답변

이것은 reset 명령에 대한 설명을 그래픽으로 보여주는 유용한 문서입니다.

https://git-scm.com/docs/git-reset

Reset –hard는 검사하지 않고 작업 복사본을 덮어 쓰므로 매우 위험 할 수 있으므로 파일을 전혀 커밋하지 않으면 사라집니다.

소스 트리에 관해서는 커밋을 취소하는 방법이 없습니다. 어쨌든 덮개 아래에서 재설정을 사용할 가능성이 큽니다.


답변

이것은 use git reset –hardgit reset –soft 의 주요 차이점입니다 .

--soft

인덱스 파일이나 작업 트리를 전혀 건드리지 않습니다 (그러나 모든 모드와 마찬가지로 헤드를로 재설정합니다). 이렇게하면 git 상태가 표시하는 것처럼 변경된 모든 파일이 “변경 사항이 커밋 될”상태가됩니다.

--hard

색인 및 작업 트리를 재설정합니다. 이후 작업 트리에서 추적 된 파일에 대한 변경 사항은 무시됩니다.


답변