질문 : 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>
그러면 현재 커밋을 지정한 커밋과 비교하여 해당 차이의 덩어리를 개별적으로 적용 할 수 있습니다. 이 옵션은 가져 오는 커밋에 관심이없는 커밋의 일부에 병합 충돌이있는 경우 더 유용 할 수 있습니다. (그러나 checkout
cherry-pick
과 다릅니다. checkout
<commit>
'을 적용하려고합니다. s 내용 전체, cherry-pick
은 지정된 커밋의 차이를 부모와 비교하여 적용합니다. 이는 checkout
이 원하는 커밋보다 더 많은 것을 적용 할 수 있음을 의미합니다.)
출처 : https://stackoverflow.com/questions/1526044/partly-cherry-picking-a-commit-with-git
'개발관련 > Git' 카테고리의 다른 글
LF를 CRLF로 대체하는 Git (0) | 2021.12.01 |
---|---|
GitHub 저장소에서 단일 폴더 또는 디렉토리 다운로드 (0) | 2021.11.30 |
git 커밋 및 태그를 동시에 푸시하는 방법 (0) | 2021.11.30 |
로컬 git 브랜치를 원격 브랜치와 비교하는 방법 (0) | 2021.11.29 |
git 커밋을 삭제하고 변경 사항을 유지하는 방법 (0) | 2021.11.29 |