[git] “git checkout -f”와“git reset –hard HEAD”의 차이점은 무엇입니까?
배포를 위해 로컬 변경 사항을 되돌려 야합니다. ( svn revert
오래된 skool SVN 시절에 이것을 사용 했습니다.)
그리고 git reset --hard HEAD
이것을 위해 사용 하고 있습니다. (또한 git fetch
과 git merge origin/$branch --no-ff
상류 지점에 대한 syncronizing).
그러나 일부 기사 git checkout -f
에서는 변경 사항을 되돌릴 수 있습니다.
이 명령의 주요 차이점은 무엇입니까? 어떤 방법이 권장됩니까?
답변
둘은 똑같은 효과를 가지고 있습니다. 더 편한 솔루션을 선택하는 것이 좋습니다.
그러나이 특별한 경우에 효과가 같고 값이 다르면 완전히 다를 것입니다. 기본적으로 (더 많은 것이 있습니다, 링크 된 주제 참조) 재설정하면 현재 분기와 HEAD를 특정 커밋으로 이동하지만 체크 아웃하면 HEAD 만 이동합니다. 자세한 내용은 아래를 참조하십시오.
자원:
같은 주제에 대해 :
답변
아직 다른 답변에 대해 언급 할 담당자가 없습니다. 두 명령이 동일한 효과가없는 경우를 발견했다고 덧붙이고 싶었습니다. 나는 이상한 상태에 빠졌으므로 이것은 확실히 엣지 케이스입니다. 다음은 일어난 일입니다.
나는 나뭇 가지에 있었고 모든 것이 깨끗했습니다. 마스터를 체크 아웃 한 git checkout master
결과 git status
커밋을 위해 준비되지 않은 기존 파일에 변경 사항이 있음을 발견했습니다 (예, 방금 체크 아웃 한 코드에서). 깨끗한 상태로 돌아 가기 위해 은닉을 시도했지만 은닉은 완료되었다고 주장했지만 git status
여전히 변경되지 않았습니다. 또한 시도했습니다 git reset --hard HEAD
. 또한 성공적으로 완료되었다고보고했지만 상태는 다르지 않았습니다. 나는 이러한 이상한 변화를 중단 할 수 없었다.
그러나 git checkout -f
이것을 해결했습니다. 나는이 이상한 상태에서 벗어날 수 있었다. 따라서 적어도 어떤면에서이 둘은 동일하지 않습니다.