에 대한 오해가있는 많은 답변이 있습니다 git reset --soft
. 일반적으로 (및 의도 된 용도로) 분리 된 헤드 상태에서 시작하여 git reset --soft
변경 되는 특정 조건이 있지만 현재 체크 아웃 한 분기 참조를 이동합니다. 물론 지점을 체크 아웃하지 않으면이 작업을 수행 할 수 없습니다 (따라서 변경 되는 특정 조건 ). HEAD
git reset --soft
HEAD
나는 이것이 최선의 방법이라고 생각했다 git reset
. 당신은 단지 움직이지 않고 HEAD
( 모든 것이 그렇게합니다 ), 또한 분기 ref를 움직입니다 ( 예 :)master
. 이것은 새로운 커밋 을 만들고 이동하는 대신 이전 커밋으로 이동한다는 점을 제외하고 실행할 때 발생하는 작업과 비슷합니다 git commit
(현재 분기가와 함께 HEAD
이동) .
이 지점 인 reset
변화, 지점 변경, 새 커밋이 아닌 다른 뭔가를하지 HEAD
. 설명서 예제에서이를 확인할 수 있습니다.
커밋을 취소하여 주제 분기로 만듭니다.
$ git branch topic/wip (1)
$ git reset --hard HEAD~3 (2)
$ git checkout topic/wip (3)
- 커밋을했지만 "마스터"지점에있는 것이 너무 이른 것을 깨달으십시오. 토픽 브랜치에서 계속 연마하고 싶으므로 현재 HEAD에서 "토픽 / 와이프"브랜치를 생성하십시오.
- 마스터 브랜치를 되 감아 서 세 가지 커밋을 제거하십시오.
- "주제 / 위핑"분기로 전환하고 계속 작동하십시오.
이 일련의 명령의 요점은 무엇입니까? 여기서 지점 을 이동하려고 master
하므로 master
체크 아웃 하는 동안 을 실행 git reset
합니다.
여기서 가장 많이 투표 된 답변은 일반적으로 좋지만 오해로 여러 답변을 수정하기 위해 이것을 추가한다고 생각했습니다.
지점 변경
git reset --soft <ref>
: 현재 체크 아웃 된 분기의 분기 포인터를 지정된 참조에서 커밋으로 재설정합니다 <ref>
. 작업 디렉토리 및 색인의 파일은 변경되지 않습니다. 이 단계에서 커밋하면 git reset
명령 전 위치로 바로 돌아갑니다 .
색인도 변경하십시오
git reset --mixed <ref>
또는 동등하게
git reset <ref>
:
무엇을합니까 --soft
수행 과 도하면 지정된 기준에 커밋 경기에 인덱스를 재설정합니다. git reset --soft HEAD
(체크 아웃 된 브랜치를 체크 아웃 된 브랜치로 옮긴다 고 말했기 때문에) 아무것도하지 않지만 git reset --mixed HEAD
, 또는 동등 git reset HEAD
하게 인덱스를 마지막 커밋 상태로 재설정하기 때문에 일반적이고 유용한 명령입니다.
작업 디렉토리도 변경하십시오
git reset --hard <ref>
: 무엇을하지 --mixed
않습니다 와 도 작업 디렉토리를 덮어 씁니다. 이 명령과 유사한 git checkout <ref>
것을 제외하고, (이 약 중요한 포인트입니다 reset
) 모든 형태의 git reset
분기 심판 이동 HEAD
를 가리키고 있습니다.
"이러한 명령은 HEAD를 움직입니다"에 대한 참고 사항 :
명령이을 이동한다고 말하는 것은 유용하지 않습니다 HEAD
. 커밋 기록에서 위치를 변경하는 모든 명령은을 이동합니다 HEAD
. 즉,이 무엇 HEAD
이며 , 당신이 어디에 있든에 대한 포인터. HEAD
당신입니다 , 그리고 당신이 할 때마다 이동합니다.