Git으로 커밋을 일부 따기
릴리스 및 개발이라는 두 가지 지점에서 작업 하고 있습니다 .
릴리스 브랜치에 커밋 된 일부 변경 사항을 개발 브랜치 로 다시 통합해야한다는 것을 알았습니다 .
문제는 커밋을 모두 필요로하지 않으며 특정 파일의 일부 덩어리 만 필요하다는 것입니다.
git cherry-pick bc66559
트릭을 수행하지 않습니다.
내가 할 때
git show bc66559
나는 diff를 볼 수 있지만 실제로 현재 작업 트리에 부분적으로 적용하는 좋은 방법을 모릅니다.
여기서 당신이 원하는 핵심은 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
, 커밋뿐만 아니라 원하는 것 이상을 적용 할 수 있음을 의미합니다 .)
나는 오래된 질문에 대답하고 있지만 대화 형으로 체크 아웃하는 새로운 방법이있는 것처럼 보입니다.
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 apply --3way <(git show -- list-of-files)
--3way
: 패치가 제대로 적용되지 않으면 Git은 병합 충돌을 일으켜 실행할 수 있습니다 git mergetool
. 생략 --3way
하면 Git은 깨끗하게 적용되지 않는 패치를 포기하게됩니다.
"부분적으로 체리 따기"가 "파일 내에서 일부 변경 사항을 선택하지만 다른 것을 버리는 것"을 의미하는 경우 다음을 가져 와서 수행 할 수 있습니다 git stash
.
- 전체 체리 따기를하십시오.
git reset HEAD^
전체 체리 피킹 커밋을 스테이지되지 않은 작업 변경으로 변환합니다.- 이제
git stash save --patch
: 숨길 수있는 원하지 않는 재료를 대화식으로 선택하십시오. - 힘내는 작업 복사본에서 숨김 변경 사항을 롤백합니다.
git commit
- 원치 않는 변경 사항을 숨기십시오
git stash drop
.
팁 : 원치 않는 변경 사항을 숨기면 이름 git stash save --patch junk
을 지정하면 (6) 지금 잊어 버리면 나중에 숨김 상태를 인식하게됩니다.
참고 URL : https://stackoverflow.com/questions/1526044/partly-cherry-picking-a-commit-with-git
'Programing' 카테고리의 다른 글
주어진 문자열 패턴을 포함하지 않는 파일은 어떻게 찾습니까? (0) | 2020.02.14 |
---|---|
토큰 기반 인증이란 무엇입니까? (0) | 2020.02.14 |
Unix 쉘 스크립트에 환경 변수가 설정되어 있는지 확인하는 간결한 방법은 무엇입니까? (0) | 2020.02.14 |
Bash에서 작은 따옴표와 큰 따옴표의 차이점 (0) | 2020.02.14 |
타입 스크립트 : 인터페이스와 타입 (0) | 2020.02.14 |