질문 : git reset --mixed, --soft 및 --hard의 차이점은 무엇입니까?
커밋을 분할하고 어떤 재설정 옵션을 사용할지 확실하지 않습니다.
나는 페이지를보고 있었다 평범한 영어로 "git reset"은 무엇을 하는가? , 그러나 나는 git 인덱스 또는 스테이징 영역이 무엇인지 실제로 이해하지 못하여 설명이 도움이되지 않는다는 것을 깨달았습니다.
--mixed
및 --soft
의 사용 사례는 해당 답변에서 나에게 동일하게 보입니다 (수정하고 다시 커밋하려는 경우). 누군가 그것을 더 분해 할 수 있습니까? --mixed
가 아마도 함께 갈 수있는 옵션이라는 것을 알고 있지만 그 이유 를 알고 싶습니다. 마지막으로 --hard
어떻습니까?
누군가가 세 가지 옵션을 선택하는 방법에 대한 워크 플로 예제를 제공 할 수 있습니까?
답변
리포지토리에서 파일을 수정하면 변경 사항이 처음에 언 스테이지됩니다. git add
사용하여 스테이징 (즉, 인덱스에 추가)해야합니다. 커밋 할 때 커밋 된 변경 사항은 인덱스에 추가 된 변경 사항입니다.
git reset
은 최소한 현재 분기 ( HEAD
)가 가리키는 위치를 변경합니다. --mixed
와 --soft
의 차이점은 인덱스도 수정되었는지 여부입니다. 따라서이 일련의 커밋 master
에있는 경우 :
- A - B - C (master)
HEAD
는 C
가리키고 인덱스는 C
와 일치합니다.
git reset --soft B
실행하면 master
(따라서 HEAD
)는 이제 B
가리 키지 만 인덱스는 여전히 C
에서 변경된 사항을가집니다. git status
는 staged로 표시됩니다. git commit
을 실행하면 C
와 동일한 변경 사항이 적용된 새 커밋을 얻게됩니다.
좋습니다. 여기서 다시 시작합니다.
- A - B - C (master)
이제 git reset --mixed B
합니다. (참고 : --mixed
가 기본 옵션입니다). 다시 한 번, master
와 HEAD
는 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
'개발관련 > Git' 카테고리의 다른 글
git 커밋되지 않았거나 저장되지 않은 모든 변경 내용 실행 취소 (0) | 2021.08.28 |
---|---|
로컬 변경 사항을 무시한 채 깃 pull 하는 방법 (0) | 2021.08.28 |
[오류] GitHub : invalid username or password (0) | 2021.08.26 |
"git add -A"와 "git add"의 차이점 (0) | 2021.08.26 |
Git : 내 마지막 커밋보기 (0) | 2021.08.25 |