git reset –mixed, –soft 및 –hard의 차이점은 무엇입니까? 커밋 할

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

나는 페이지를보고있다 영어로 “git reset”은 무엇을 하는가? 하지만 git index 또는 staging 영역이 무엇인지 이해하지 못해 설명이 도움이되지 않는다는 것을 깨달았습니다.

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

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



답변

리포지토리에서 파일을 수정하면 초기에 변경 사항이 취소됩니다. 커밋하려면을 사용하여 준비해야 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단계별로 표시합니다. 따라서이 git commit시점에서 실행 하면와 동일한 변경 사항으로 새로운 커밋을 얻게됩니다 C.


자, 여기서부터 다시 시작하십시오.

- A - B - C (master)

이제하자 git reset --mixed B. (참고 : --mixed기본 옵션입니다). 다시 한번, master그리고 HEADB를 가리킨하지만,이 시간은 인덱스도 일치하도록 수정됩니다 B. git commit이 시점에서 실행 하면 인덱스가 일치하므로 아무 일도 일어나지 않습니다 HEAD. 작업 디렉토리에는 여전히 변경 사항이 있지만 색인에 없으므로 변경되지 않은 것으로 git status표시됩니다. 커밋하려면 git add평소처럼 커밋하십시오.


그리고 마지막으로, --hard같은 것입니다 --mixed(그것이 당신의 변화 HEAD즉 제외하고, 인덱스) --hard도 작업 디렉토리를 수정합니다. 에 C있고 실행 중이면에 git reset --hard B추가 된 변경 사항 C과 커밋되지 않은 변경 사항이 제거되고 작업 복사본의 파일이 commit과 일치 B합니다. 이 방법으로 변경 사항을 영구적으로 잃을 수 있으므로 git status하드 리셋을 수행 하기 전에 항상 실행 하여 작업 디렉토리가 깨끗하거나 커밋되지 않은 변경 사항을 잃어 버릴 수 있는지 확인해야합니다.


그리고 마지막으로 시각화 :
여기에 이미지 설명을 입력하십시오


답변

가장 간단한 용어로 :

  • --soft: 커밋을 취소 하면 변경 사항이 준비됩니다 ( index ).
  • --mixed (기본값) : uncommit + unstage changes, 변경 사항은 작업 트리에 남아 있습니다.
  • --hard: 커밋 해제 + 스테이지 해제 + 변경 사항 삭제 , 남은 항목 없음.

답변

이 복잡한 기능을 이해하기위한 첫 번째 단계로 단순화 된 설명입니다.

다음 각 명령 후에 프로젝트 상태를 시각화하려는 시각 학습자에게 도움이 될 수 있습니다.


색상을 켠 상태에서 터미널을 사용하는 사용자 (git config –global color.ui auto) :

git reset --soft A 그리고 당신은 B와 C의 물건을 녹색으로 볼 것입니다 (단계적이며 커밋 준비 완료)

git reset --mixed A(또는 git reset A) B와 C의 내용이 빨간색으로 표시됩니다 (미 준비 및 준비 (녹색) 및 커밋 준비 완료).

git reset --hard A 더 이상 어디에도 B와 C의 변화가 보이지 않을 것입니다.


또는 ‘Tower’또는 ‘SourceTree’와 같은 GUI 프로그램을 사용하는 사람들

git reset --soft A ‘준비된 파일’영역에서 B와 C의 내용을 커밋 할 준비가 된 것을 볼 수 있습니다.

git reset --mixed A(또는 git reset A) ‘스테이지되지 않은 파일’영역에서 B 및 C의 항목을 스테이지로 이동 한 다음 커밋 할 수 있습니다.

git reset --hard A 더 이상 어디에도 B와 C의 변화가 보이지 않을 것입니다.


답변

다른 모든 답변은 중대하다,하지만 난 최선이 세 가지 범주로 파일을 분해하여 그들을 이해하고 찾을 : unstaged, staged, commit:

  • --hard 이해하기 쉬워야합니다. 모든 것을 복원합니다.
  • --mixed (기본값) :
    1. unstaged파일 : 변경하지 마십시오
    2. staged 파일 : 이동 unstaged
    3. commit 파일 : 이동 unstaged
  • --soft:
    1. unstaged파일 : 변경하지 마십시오
    2. staged파일 : 변경하지 마십시오
    3. commit 파일 : 이동 staged

요약하자면:

  • --soft옵션은 모든 unstaged파일 ( 파일 제외 )을staging area
  • --mixed 옵션은 모든 것을 unstaged area

답변

TortoiseGit 사용자를위한 기본 설명은 다음과 같습니다.

git reset --soft--mixed훼손되지 않은 파일을 둡니다.

git reset --hard실제로 재설정 한 커밋과 일치하도록 파일변경하십시오 .

TortoiseGit 에서 인덱스 의 개념은 GUI에 의해 숨겨져 있습니다. 파일을 수정할 때 git add준비 영역 / 인덱스에 변경 사항을 추가 하기 위해 실행할 필요는 없습니다 . 단순히 파일 이름을 변경하지 않는 기존 파일에 대한 수정을 다루는 경우 git reset --soft--mixed동일합니다! 새 파일을 추가하거나 파일 이름을 바꾼 경우에만 차이가 있습니다. 이 경우 git reset –mixed를 실행하면 버전 이 지정 되지 않은 파일 목록 에서 파일을 다시 추가해야합니다 .


답변

이 경우 희망적으로 이것을 설명 할 수있는 비주얼을 좋아합니다.

git reset --[hard/mixed/soft] :

여기에 이미지 설명을 입력하십시오

따라서 각 효과마다 다른 범위

  1. Hard => WorkingDir + Index + HEAD
  2. 혼합 => 색인 + HEAD
  3. Soft => HEAD 만 해당 (인덱스 및 작업 디렉토리는 변경되지 않음).

답변

후회의 세 가지 유형

많은 기존 답변이 실제 질문에 답변하지 않는 것 같습니다. 명령은 사용자 (사용자)가 원하는 것이 아니라 사용 사례에 관한 것이 아닙니다 . 그러나 그것이 OP가 요구 한 것입니다!

명령 을 내릴 때 후회 하는 것이 정확히 무엇인지에 관한 설명을 요약하면 도움이 될 수 있습니다 git reset. 우리가 이것을 가지고 있다고 가정 해 봅시다.

A - B - C - D <- HEAD

다음은 가능한 후회와 이에 대한 조치입니다.

1. 나는 B, C, D가 하나의 커밋 이 아니라는 것을 후회한다 .

git reset --soft A. A 하나의 커밋 이므로 모든 변경 사항을 즉시 커밋하고 미리 설정할 수 있습니다 .

2. 나는 B, C, D가 10 개의 커밋 이 아니라는 것을 후회 한다.

git reset --mixed A. 커밋이 사라지고 인덱스가 A로 돌아 왔지만 작업 영역은 여전히 ​​D 다음과 같이 보입니다. 이제는 완전히 다른 그룹으로 추가 및 커밋 할 수 있습니다.

3. 나는 이 지점에서 B, C, D가 일어난 것을 후회한다 ; 나는 A 다음에 지점을 가지기를 원했고 그들은 다른 지점에서 일어났다.

새 분기 otherbranch를 만든 다음 git reset --hard A. 현재 지점은 이제 A에서 끝나며 그 지점에서 otherbranch파생됩니다.

(물론 B, C 및 D가 전혀 발생하지 않기를 원하기 때문에 하드 리셋을 사용할 수도 있습니다.)