it-swarm.dev

Git Revert, Checkout 및 Reset의 차이점은 무엇입니까?

파일 및 프로젝트를 이전 상태로 복원 또는 롤백하는 방법을 배우려고하는데 git revert, checkoutreset의 차이점을 이해하지 못합니다. 겉보기에는 같은 목적을 위해 세 가지 명령이있는 이유는 무엇이며 누군가는 언제 다른 것을 선택해야합니까?

234
haziz

이 세 명령은 완전히 다른 목적을 가지고 있습니다. 그것들은 원격으로 비슷하지도 않습니다.

git revert

이 명령은 이전 커밋의 변경 사항을 취소하는 새 커밋을 만듭니다. 이 명령은 프로젝트에 새 기록을 추가합니다 (기존 기록은 수정하지 않음).

git checkout

이 명령은 저장소에서 컨텐츠를 체크 아웃하고 작업 트리에 넣습니다. 명령 호출 방식에 따라 다른 영향을 줄 수도 있습니다. 예를 들어 현재 작업중인 지점을 변경할 수도 있습니다. 이 명령은 기록을 변경하지 않습니다.

git reset

이 명령은 조금 더 복잡합니다. 실제로 호출 방법에 따라 몇 가지 다른 작업을 수행합니다. 인덱스 (소위 "스테이징 영역")를 수정합니다. 또는 현재 지점 헤드를 커밋하는 변경 사항입니다. 이 명령은 분기가 참조하는 커밋을 변경하여 기존 기록을 변경할 수 있습니다.

이 명령 사용

커밋이 프로젝트 히스토리 어딘가에서 이루어지고 나중에 커밋이 잘못되어 수행되지 않아야한다고 결정한 경우 git revert이 (가) 해당 작업의 도구입니다. 잘못된 커밋으로 인한 변경 사항을 취소하고 기록에 "실행 취소"를 기록합니다.

작업 트리에서 파일을 수정했지만 변경 사항을 커밋하지 않은 경우 git checkout를 사용하여 파일의 저장소에서 최신 사본을 체크 아웃 할 수 있습니다.

커밋을했지만 다른 사람과 공유하지 않고 원하지 않는 경우 git reset를 사용하여 기록을 다시 작성하여 커밋하지 않은 것처럼 보일 수 있습니다. .

이들은 가능한 사용 시나리오 중 일부일뿐입니다. 일부 상황에서 유용 할 수있는 다른 명령이 있으며 위의 세 명령은 다른 용도로도 사용됩니다.

411
Dan Moulding
  • git revert은 (는) 이전 커밋을 취소하는 데 사용됩니다. 자식에서는 이전 커밋을 변경하거나 지울 수 없습니다. (실제로는 할 수 있지만 문제가 발생할 수 있습니다.) 따라서 이전 커밋을 편집하는 대신 되돌리기는 이전 커밋을 되 돌리는 새로운 커밋을 도입합니다.
  • git reset은 (는) 아직 커밋되지 않은 작업 디렉토리의 변경 사항을 취소하는 데 사용됩니다.
  • git checkout은 다른 커밋에서 현재 작업 트리로 파일을 복사하는 데 사용됩니다. 파일을 자동으로 커밋하지 않습니다.
28
Jonathan

커밋을했다고 가정 해 봅시다.

C
B
A

git revert B, B의 변경 사항을 취소하는 커밋을 만듭니다.

git revert A, A의 변경 사항을 취소하는 커밋을 생성하지만 B의 변경 사항은 건드리지 않습니다.

B의 변경 사항이 A의 변경 사항에 종속 된 경우 A의 되돌릴 수 없습니다.

git reset --soft A, 커밋 히스토리 및 저장소를 변경합니다. 스테이징 및 작업 디렉토리는 여전히 C 상태입니다.

git reset --mixed A, 커밋 히스토리, 리포지토리 및 스테이징을 변경합니다. 작업 디렉토리는 여전히 C 상태입니다.

git reset --hard A, 커밋 히스토리, 저장소, 스테이징 및 작업 디렉토리를 변경합니다. A 상태로 완전히 돌아갑니다.

23
Akavall
  • git checkout은 (는) 작업 트리를 수정합니다.
  • git reset은 현재 지점을 가리키는 참조를 수정합니다.
  • git revert 커밋 실행 취소 변경 사항을 추가합니다.
20
dan_waterworth

Reset- 커밋 수준에서 재설정은 분기의 끝을 다른 커밋으로 이동하는 방법입니다. 현재 브랜치에서 커밋을 제거하는 데 사용할 수 있습니다.

Revert- 되돌리기는 새로운 커밋을 만들어 커밋을 취소합니다. 커밋 기록을 다시 쓸 기회가 없으므로 변경 사항을 취소하는 안전한 방법입니다. 이것을 기존 커밋 히스토리를 변경하는 git reset과 대조하십시오. 이러한 이유로 git revert를 사용하여 공개 브랜치에서 변경 사항을 취소하고 git reset을 개인 브랜치에서 변경 사항을 취소하기 위해 예약해야합니다.

이 링크를 살펴볼 수 있습니다 - 재설정, 체크 아웃 및 되돌리기

6
Sachchidanand Singh

트리를 중단했지만 코드를 커밋하지 않은 경우 git reset를 사용하고 하나의 파일 만 복원하려는 경우 git checkout를 사용할 수 있습니다.

트리를 깨고 코드를 커밋 한 경우 git revert HEAD를 사용할 수 있습니다.

http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html

5
LostMohican