부분적으로 깃과 약속을 선택하는 것.
저는 출시와 개발이라는 두 개의 다른 부서에서 일하고 있습니다.
릴리스 분기에 커밋된 일부 변경 사항을 개발 분기에 다시 통합해야 한다는 것을 알게 되었습니다.
문제는 모든 커밋이 필요한 것이 아니라 특정 파일의 일부 펑크만 필요하기 때문에 단순합니다.
git cherry-pick bc66559
속임수를 쓰지 않습니다.
내가 할 때
git show bc66559
차이는 알 수 있지만 현재 작업 트리에 부분적으로 적용할 수 있는 좋은 방법을 잘 모르겠습니다.
여기서 당신이 원하는 핵심은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
선택권, 그리고 당신이 필요하다고 지적해준 펠릭스 라베에게 감사합니다.git reset
커밋에서 몇 가지만 제외하고 싶다면 다음을 사용할 수 있습니다.git reset <path>...
이러한 파일의 스테이징을 해제합니다.)
특정 경로를 제공할 수 있습니다.add -p
필요하면.패치로 시작하는 경우 다음을 대체할 수 있습니다.cherry-pick
와 함께apply
.
당신이 정말 원한다면,git cherry-pick -p <commit>
(해당 옵션이 존재하지 않음), 사용할 수 있습니다.
git checkout -p <commit>
지정한 커밋에 대해 현재 커밋을 다르게 설정하고 해당 커밋에서 개별적으로 헝크를 적용할 수 있습니다.이 옵션은 끌어 들이는 커밋에서 관심 없는 커밋의 일부가 병합 충돌하는 경우에 더 유용할 수 있습니다.checkout
다르다cherry-pick
:checkout
적용하려고 합니다.<commit>
의 내용은 전적으로, 반면에.cherry-pick
지정한 커밋과 상위 커밋의 차이를 적용합니다.즉,checkout
해당 커밋 이상을 적용할 수 있으며, 원하는 것 이상일 수 있습니다.)
오래된 질문에 답하고 있다는 것은 알지만 대화형 체크아웃을 통해 이를 수행할 수 있는 새로운 방법이 있는 것 같습니다.
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
Mike Monkiewicz 답변을 기반으로 제공된 sha1/branch에서 체크아웃할 단일 파일을 지정할 수도 있습니다.
git checkout -p bc66559 -- path/to/file.java
이렇게 하면 현재 버전의 파일에 적용할 변경 사항을 대화형으로 선택할 수 있습니다.
명령줄에 파일 목록을 지정하고 단일 원자 명령으로 모든 작업을 수행하려면 다음을 수행합니다.
git apply --3way <(git show -- list-of-files)
--3way
적용되지 가 실행할 수 .git mergetool
생략--3way
깨끗하게 적용되지 않는 패치를 포기하도록 Git를 만들 것입니다.
사용하다git format-patch
당이관있심부분잘그고라리고내을는신▁to그리고▁of▁slice▁the▁part고▁out.git am
지점에 ▁to해.
git format-patch <sha> -- path/to/file
git checkout other-branch
git am *.patch
" 피킹이 "에서, 사항은 하고 다른 변경 사항은 것 " 분적으가따체를파기", "일부변사사폐기은변항다경른선택항부경하고서은로다의미니있습하수수경식는으방는할로행오가져을음다이는우리에내일▁"▁in,▁if▁▁picking,▁means▁files"▁by"ing부를▁otherspart▁"ly▁cherry▁it▁done▁bewithin▁choosing▁can다있▁but니습수▁some▁"할수행가으식로분적으▁changes방▁discard는파git stash
:
- 체리픽 풀로 해주세요.
git reset HEAD^
전체 체리 소스 커밋을 단계별 작업 변경으로 전환합니다.- 지금이다
git stash save --patch
저장할 원하지 않는 재료를 대화식으로 선택합니다. - Git는 작업 복사본에서 저장된 변경사항을 롤백합니다.
git commit
- 원하지 않는 변경사항의 저장을 폐기합니다.
git stash drop
.
않는 팁: 원: 치않는변내저지경우이름:git stash save --patch junk
그런 다음 지금 (6)하는 것을 잊으면 나중에 그것이 무엇인지에 대한 저장소를 인식할 수 있습니다.
사실, 이 질문에 대한 가장 좋은 해결책은 다음과 같습니다.checkout
표창을 수여하다
git checkout <branch> <path1>,<path2> ..
예를 들어 마스터에 있다고 가정하면 dev1에서 변경된 내용을project1/Controller/WebController1.java
그리고.project1/Service/WebService1.java
다음을 사용할 수 있습니다.
git checkout dev1 project1/Controller/WebController1.java project1/Service/WebService1.java
즉, 마스터 분기는 이러한 두 경로의 dev1에서만 업데이트됩니다.
언급URL : https://stackoverflow.com/questions/1526044/partly-cherry-picking-a-commit-with-git
'programing' 카테고리의 다른 글
MongoDB - 10진수 유형의 값은 어떻습니까? (0) | 2023.05.22 |
---|---|
gitstash 변경 사항이 새 지점에 적용됩니까? (0) | 2023.05.22 |
Xaml Value 필드에서 사용자 지정 색상 값을 설정하려면 어떻게 해야 합니까? (0) | 2023.05.17 |
.NET 4.0에는 새로운 GAC가 있습니다. 이유는 무엇입니까? (0) | 2023.05.17 |
Python 패키지를 설치할 때 "오류: Microsoft Visual C++ 14.0 이상이 필요합니다"를 해결하는 방법은 무엇입니까? (0) | 2023.05.17 |