커밋을 git의 스테이징 영역으로 어떻게 이동합니까?


143

커밋을 스테이징 영역으로 이동하려면 커밋을 해제하고 스테이징 영역에 있던 모든 변경 사항을 스테이징 영역으로 이동하십시오 (지점을 커밋 이전의 상태로 효과적으로 설정). 어떻게합니까? 아니면 할 수없는 일입니까?

내가하는 가장 가까운 방법은 커밋에서 변경된 모든 파일을 다른 곳으로 복사하고 준비 영역으로 이동하려는 커밋 전에 분기를 커밋으로 재설정하고 파일을 다시 저장소로 복사 한 다음 준비 영역에 추가하십시오. 작동하지만 정확히 좋은 해결책은 아닙니다. 내가 할 수있는 일은 커밋을 취소하고 변경 사항을 준비 영역으로 옮기는 것입니다. 할 수 있습니까? 그렇다면 어떻게?

답변:


267
git reset --soft HEAD^

그러면 인덱스가 HEAD^(이전 커밋)으로 재설정 되지만 스테이징 영역에는 변경 사항이 남아 있습니다.

문서 에는 몇 가지 편리한 다이어그램 이 있습니다.git-reset

Windows를 사용하는 경우 다음 형식을 사용해야합니다.

git reset --soft HEAD~1

18
이것이 아무것도하지 않으면 git reset --soft HEAD~1동일한 것을 의미하지만 Windows에서도 작동합니다.
Roman Starkov

9
명확히하기 위해 물결표 및 캐럿은 자식 버전에서 다른 것을 의미합니다. HEAD ~ 1은 항상 커밋의 첫 번째 부모를 따릅니다. 여러 부모가있는 병합 커밋 인 경우에는 원하지 않을 수도 있습니다. Windows cmd 셸과 관련하여 "git reset --soft HEAD ^^"와 같은 다른 캐럿으로 캐럿을 이스케이프하면 "HEAD ^"로 돌아갑니다. 이것은 순전히 Windows cmd 쉘의 아티팩트이므로 Windows에서 git GUI를 사용하는 경우에는 그렇게 할 필요가 없습니다. 틸드와 캐럿은 schacon.github.io/git/git-rev-parse#_specifying_revisions
ahains

"핸디 다이어그램"에 대한 링크를 추가했습니다. 의도 한 섹션으로 연결되는지 빠르게 확인할 수 있습니까? 감사합니다
Neuron

5

간단한 방법

  1. 준비 영역으로 커밋 된 파일

    git reset --soft HEAD^1

  2. UnStage로 스테이징 :( "git reset HEAD ..."를 사용하여 스테이지 해제)

    git reset HEAD git commands.txt or git reset HEAD *ds.txt

여기에서 *-> 모든 파일은 ds.txt로 끝나서 스테이지를 해제합니다.

명확성을 위해 아래 그림을 참조하십시오.

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.