개발관련/Git

git reset --mixed, --soft 및 --hard의 차이점

Rateye 2021. 8. 26. 10:24
728x90
반응형

 

질문 : git reset --mixed, --soft 및 --hard의 차이점은 무엇입니까?

커밋을 분할하고 어떤 재설정 옵션을 사용할지 확실하지 않습니다.

나는 페이지를보고 있었다 평범한 영어로 "git reset"은 무엇을 하는가? , 그러나 나는 git 인덱스 또는 스테이징 영역이 무엇인지 실제로 이해하지 못하여 설명이 도움이되지 않는다는 것을 깨달았습니다.

--mixed--soft 의 사용 사례는 해당 답변에서 나에게 동일하게 보입니다 (수정하고 다시 커밋하려는 경우). 누군가 그것을 더 분해 할 수 있습니까? --mixed 가 아마도 함께 갈 수있는 옵션이라는 것을 알고 있지만 그 이유 를 알고 싶습니다. 마지막으로 --hard 어떻습니까?

누군가가 세 가지 옵션을 선택하는 방법에 대한 워크 플로 예제를 제공 할 수 있습니까?

답변

리포지토리에서 파일을 수정하면 변경 사항이 처음에 언 스테이지됩니다. git add 사용하여 스테이징 (즉, 인덱스에 추가)해야합니다. 커밋 할 때 커밋 된 변경 사항은 인덱스에 추가 된 변경 사항입니다.

git reset 은 최소한 현재 분기 ( HEAD )가 가리키는 위치를 변경합니다. --mixed--soft 의 차이점은 인덱스도 수정되었는지 여부입니다. 따라서이 일련의 커밋 master 에있는 경우 :

- A - B - C (master)

HEADC 가리키고 인덱스는 C 와 일치합니다.

git reset --soft B 실행하면 master (따라서 HEAD )는 이제 B 가리 키지 만 인덱스는 여전히 C 에서 변경된 사항을가집니다. git status 는 staged로 표시됩니다. git commit 을 실행하면 C 와 동일한 변경 사항이 적용된 새 커밋을 얻게됩니다.

좋습니다. 여기서 다시 시작합니다.

- A - B - C (master)

이제 git reset --mixed B 합니다. (참고 : --mixed 가 기본 옵션입니다). 다시 한 번, masterHEAD 는 B를 가리 키지 만 이번에는 인덱스도 B 와 일치하도록 수정됩니다. git commit 을 실행 HEAD 와 일치하기 때문에 아무 일도 일어나지 않습니다. 우리는 여전히 작업 디렉토리에 변경 사항이 있지만 인덱스에 없기 때문에 git status 는이를 unstaged로 표시합니다. 커밋하려면 git add 를 한 다음 평소와 같이 커밋합니다.

마지막으로 --hard --mixed 와 동일합니다 ( HEAD 및 인덱스 변경). 단, --hard 작업 디렉토리도 수정한다는 점만 다릅니다. C 에서 git reset --hard B C 추가 된 변경 사항과 커밋되지 않은 변경 사항이 제거되고 작업 복사본의 파일이 커밋 B 와 일치합니다. 이런 식으로 영구적으로 변경 사항을 잃을 수 있으므로 git status 를 실행하여 작업 디렉토리가 깨끗하거나 커밋되지 않은 변경 사항을 잃어도 괜찮은지 확인해야합니다.

마지막으로 시각화 :

여기에 이미지 설명 입력

출처 : https://stackoverflow.com/questions/3528245/whats-the-difference-between-git-reset-mixed-soft-and-hard
728x90
반응형