답변:
여기서 당신이 원하는 핵심은 git add -p
( -p
과 동의어입니다 --patch
)입니다. 이는 대화식으로 콘텐츠를 체크인하여 각 덩어리가 들어가야하는지 여부를 결정하고 필요한 경우 수동으로 패치를 편집 할 수 있도록합니다.
체리 픽과 함께 사용하려면 :
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(git-cherry-pick에는 --no-commit 옵션이 있음을 상기시켜 준 Tim Henigan에게 감사 드리며 재설정해야한다는 점을 지적한 Felix Rabe에게 감사드립니다! 커밋에서 몇 가지만 남겨두고 싶다면 git reset <path>...
해당 파일 만 스테이지 해제 할 수 있습니다 .)
물론 add -p
필요한 경우 특정 경로를 제공 할 수 있습니다 . 당신이 패치로 시작하는 경우에는 대체 할 수 cherry-pick
와 함께 apply
.
정말로 git cherry-pick -p <commit>
(그 옵션이 존재하지 않는)을 원한다면
git checkout -p <commit>
현재 커밋을 지정한 커밋과 비교하여 해당 diff의 덩어리를 개별적으로 적용 할 수 있습니다. (가) 당신의 부분에있다 병합 충돌 당기는하고 커밋에 관심이 아니에요 커밋이 옵션이 더 유용 할 수있다 (단, 있음. checkout
다릅니다 cherry-pick
: checkout
시도 적용 <commit>
완전히 내용의, cherry-pick
의 DIFF 적용 부모로부터 지정된 커밋. 즉 checkout
, 커밋뿐만 아니라 원하는 것 이상을 적용 할 수 있음을 의미합니다 .)
cherry-pick -n
분명 하지 않은 변경 사항을두고는 무대 - 협약이 있음을 확실히 --no-commit
옵션이 중지 바로 변경이 연출 모두와 함께 즉, 커밋하기 전에. 답변에 재설정을 추가하겠습니다.
git checkout -p <F>
않습니다 하지 그냥 당신이 ABCDEF 모두 함께 으깬 얻고 종류의 어떤 부분 당신이 원하는 것을에서 다음을 수행 할 수 있습니다, 당신에게 F의 변경을 얻을 . 이것을 F의 변화 중 일부로 나누는 것은 고통입니다. 반면에 git cherry-pick -n <F>
F의 변경 사항 만 가져옵니다. 이러한 변경 중 일부가 충돌하는 경우 제대로 병합하는 방법을 알 수 있도록 도움이됩니다.
git reset
(가) 파일을 개최 제거 것과는 add -p
단지 '를 추가하는 것도'을 말할 것이다.
나는 오래된 질문에 대답하고 있지만 대화 형으로 체크 아웃하는 새로운 방법이있는 것처럼 보입니다.
git checkout -p bc66559
원하는 변경 사항이 변경하려는 지점의 헤드에 있다고 가정하면 git checkout을 사용하십시오.
단일 파일의 경우 :
git checkout branch_that_has_the_changes_you_want path/to/file.rb
여러 파일의 경우 데이지 체인 :
git checkout branch_that_has_the_changes_you_want path/to/file.rb path/to/other_file.rb
바탕 마이크 Monkiewicz 것은 당신은 또한 제공된 SHA1 / 지점에서 체크 아웃에 하나 이상의 파일을 지정할 수 있습니다 대답합니다.
git checkout -p bc66559 -- path/to/file.java
그러면 현재 버전의 파일에 적용 할 변경 사항을 대화식으로 선택할 수 있습니다.
"부분적으로 체리 따기"가 "파일 내에서 일부 변경 사항을 선택하지만 다른 것을 버리는 것"을 의미하는 경우 다음을 가져 와서 수행 할 수 있습니다 git stash
.
git reset HEAD^
전체 체리 피킹 커밋을 스테이지되지 않은 작업 변경으로 변환합니다.git stash save --patch
: 대화식으로 원하지 않는 재료를 숨기고 선택하십시오.git commit
git stash drop
.팁 : 원치 않는 변경 사항을 숨기면 이름 git stash save --patch junk
을 지정하면 (6) 지금 잊어 버리면 나중에 숨김 상태를 인식하게됩니다.