17. 브랜치에서 커밋 제거
목표
- 브랜치의 최근 커밋을 삭제하는 방법을 배우려면
Revert
는 저장소에 대한 모든 커밋을 취소 할 수있는 이전 섹션의 강력한 명령입니다. 그러나 원래 커밋과 취소 된 커밋이 모두 기록에 표시됩니다. (git log
명령을 사용하는 경우)
이미 커밋을 수행 한 후에 종종 실수라는 것을 알게됩니다. 잘못된 커밋을 즉시 삭제할 수있는 undo 명령입니다.이 명령은 git log
기록에 하나 이상의 원치 않는 커밋이 나타나는 것을 방지합니다.
01 재설정 명령
우리는 이미 reset
명령을 사용하여 버퍼 영역과 선택한 커밋을 일치 시켰습니다 (이전 레슨에서 HEAD 커밋이 사용되었습니다).
커밋 참조 (예 : 분기, 해시 또는 태그 이름)가 제공되면 reset
명령은 …
- 올바른 커밋을 가리 키도록 현재 분기를 덮어 씁니다.
- 선택적으로 지정된 커밋을 준수하도록 버퍼 영역을 재설정합니다. / li>
- 선택적으로 지정된 커밋과 일치하도록 작업 디렉토리를 재설정
02 기록 확인
커밋 기록을 빠르게 스캔하겠습니다. .
실행 :
git hist
결과 :
이 분기의 마지막 두 커밋은 “죄송합니다. “및”죄송합니다. ” reset
명령으로 제거하겠습니다.
03이 분기를 먼저 표시
마지막 커밋을 tag, so you can find it after removing a commit(s).
실행 :
git tag oops
04 커밋을 이전 Oops로 재설정
In 위의 기록 로그에서 “v1″태그가 붙은 커밋은 “Oops”및 “Revert Oops”커밋 앞에 있습니다. 분기를 해당 지점으로 재설정하겠습니다. 분기에 태그가 있으므로 재설정 명령에서 태그 이름을 사용할 수 있습니다 (태그가없는 경우 해시 값을 사용할 수 있음).
실행 :
git reset --hard v1git hist
결과 :
마스터 브랜치는 커밋 v1을 가리키고 있으며 “Revert Oops”및 “Oops”커밋이 더 이상 브랜치에 존재하지 않습니다. --hard
매개 변수는 작업 디렉토리가 새 브랜치 헤드를 반영하도록합니다.
05 아무것도 손실되지 않습니다.
잘못된 커밋은 어떻게 되었습니까? 그들은 여전히 저장소에 있습니다. 사실, 우리는 여전히 그들을 참조 할 수 있습니다. 강의 시작 부분에서 취소 된 커밋에 대한 “oops”태그를 만들었습니다. 모든 커밋을 살펴 보겠습니다.
실행 :
git hist --all
결과 :
잘못된 커밋은 사라지지 않습니다. 더 이상 마스터 브랜치에 나열되지 않지만 여전히 저장소에 남아 있습니다. 태그를 지정하지 않으면 여전히 저장소에 있지만 해시 이름으로 만 참조 할 수 있습니다. 참조되지 않은 커밋은 시스템에서 가비지 수집 소프트웨어가 실행될 때까지 저장소에 남아 있습니다.
06 위험 재설정
로컬 분기의 재설정은 일반적으로 무해합니다. “사고”의 결과는 적절한 커밋을 사용하여 되돌릴 수 있습니다.
그러나 브랜치를 원격 저장소에서 공유하면 브랜치를 공유하는 다른 사용자가 혼란 스러울 수 있습니다.