개발관련/Git

Git으로 부분적으로 커밋 선택하기

Rateye 2021. 11. 30. 09:46
728x90
반응형
질문 : 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-pickapply 바꿀 수 있습니다.

정말로 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
728x90
반응형