[git] Git에서 비 단계적 변경 사항 만 처리

다음 작업 흐름을 수행하고 싶습니다.

  1. 스테이지에 변경 사항을 추가하십시오.
  2. 준비되지 않은 다른 모든 변경 사항을 보관하십시오.
  3. 무대에있는 것들로 무언가를하십시오 (예 : 빌드, 테스트 실행 등)
  4. 숨김을 적용하십시오.

2 단계를 수행하는 방법이 있습니까?

 echo "123" > foo
 git add foo # Assumes this is a git directory
 echo "456" >> foo
 git stash
 cat foo # Should yield 123



답변

git stash save--keep-index정확히 필요한 것을 수행 하는 옵션 이 있습니다.

을 실행하십시오 git stash save --keep-index.


답변

이는 3 단계로 수행 할 수 있습니다. 단계적 변경 사항 저장, 기타 모든 항목 숨김, 단계적 변경 사항으로 색인 복원. 기본적으로

git commit -m 'Save index'
git stash push -u -m 'Unstaged changes and untracked files'
git reset --soft HEAD^

이것은 당신이 원하는 것을 정확하게 할 것입니다.


답변

git stash save --keep-index

또한, Re :

준비한 후에 변경 사항을 커밋하지 않겠습니까? – 신

A : 테스트 된 코드를 항상 체크인해야하기 때문에 🙂 즉, 커밋하려는 변경 사항만으로 테스트를 실행해야합니다.

떨어져 물론, 경험있는 프로그래머로, 당신은 테스트 및 검토 바로 그 변화에 타고난 충동을 가지고 있다는 사실에서이 모든 -에만 부분적으로 농담


답변

git version 2.7.4당신 과 함께 할 수 있습니다 :

git stash save --patch

git당신이 숨기고에 변경 사항을 추가하거나하지 않도록 요청합니다.
그리고 당신은 그냥 대답 y하거나n

항상 그렇듯이 작업 디렉토리를 복원 할 수 있습니다.

git stash pop

또는 저장된 변경 사항을 숨김 상태로 유지하려면 다음을 수행하십시오.

git stash apply


답변

이전 답변을 연장하면서 때로는 복잡한 일련의 변경 단계가 있지만 별도의 변경을 먼저 수행하려고합니다. 예를 들어, 단계적 변경을 수정하기 위해 버그 또는 잘못된 코드를 발견했을 수 있습니다. 가능한 경로는 다음과 같습니다.

먼저 모든 것을 숨기고 단계적 변경은 그대로 두십시오.

$ git stash save –keep-index [–include-untracked]

이제 단계적 변경 사항도 별도로 숨 깁니다.

$ 자식 숨김 저장

수정을 위해 변경하십시오. 그리고 테스트; 그들을 저 지르십시오 :

$ git add [–interactive] [–patch]

$ git commit -m “fix …”

이제 이전 단계 변경 사항을 복원하십시오.

$ git stash pop

충돌을 해결하고 충돌이 발생하면 git은 해당 최상위 숨김 항목을 적용했지만 삭제 하지는 않습니다 .

(… 그런 다음 단계적 변경 사항을 커밋하고 다른 모든 변경 사항의 숨김을 복원하고 계속하십시오 …)


답변

태그가 지정되지 않은 (커밋에 추가되지 않은) 파일을 숨김에 추가하려면 다음 명령을 실행하십시오.

git stash -k

그런 다음 준비된 파일을 커밋 할 수 있습니다. 그 후 다음 명령을 사용하여 마지막 숨김 파일을 다시 가져올 수 있습니다.

git stash pop


답변

Git에서 작업 트리 (스테이지되지 않은 변경 사항) 만 숨기는 것이보다 어렵습니다. 수락 된 답변은 비 단계적 변경 사항을 숨기고 단계적 변경 사항 도 숨기고 (단계적으로 남겨 둡니다), 거의 원하지 않습니다.

이 별명은 잘 작동합니다.

stash-working = "!f() { \
  git commit --quiet -m \"temp for stash-working\" && \
  git stash push \"$@\" && \
  git reset --quiet --soft HEAD~1; }; f"

단계적 변경 사항을 일시적으로 커미트하고 나머지 변경 사항에서 숨김을 작성하고 별명 인수 --include-untracked와 같은 추가 인수 --message를 전달한 다음 임시 커미트를 재설정하여 단계적 변경 사항을 되돌립니다.

@Simon Knapp의 답변 과 비슷 하지만 약간의 차이점이 있습니다. --quiet취한 임시 작업에 사용 되며을 push하드 코딩하는 대신 숨김에 대해 여러 매개 변수를 허용 하며 최종에 -m추가 --soft합니다. 인덱스가 시작된 그대로 유지되도록 재설정하십시오.

스테이징의 반대 문제에 대해서는 단계적 변경 (별칭 stash-index) 만이 답변을 참조하십시오 .