"특정 파일을 만지는 커밋 만 다른 지사에서 체리 선택"을 요청하는 간결한 방법은 무엇입니까? 즉 명령어 git log ..other-branch afile
은 "afile"을 터치하는 다른 브랜치에서 병합되지 않은 커밋 목록을 제공합니다. 이 커밋 세트를 현재 브랜치에서 재생하도록 요청하려면 어떻게해야합니까?체리 선택 특정 파일을 만지는 커밋
답변
git cherry-pick $(git log --reverse --pretty=format:"%H" filename)
트릭을 수행해야합니다. git log --reverse --pretty=format:"%H" filename
은 기본적으로 커밋이 올바른 순서로 병합되도록 filename
을 역순으로 수정 한 모든 커밋의 새 행 분리 목록을 제공합니다. 그런 다음 git cherry-pick에 목록을 제공합니다.
git cherry-pick $(git rev-list --reverse HEAD -- filename)
은 Magnus Bäck이 제공 한 위 명령의 다른 버전입니다.
"그런 다음 sed는 모든 \ n의 (줄 바꿈)을 공간 "- 당신은 그럴 필요가 없습니다. IFS가 기본값을 가지고있는 한, 줄 바꿈과 공백은 인용되지 않은 $ (...) 확장에서 동일한 방식으로 작동합니다. – hvd
나는 그런 구조를 사용하여 끝냈다 - 나는 bash 명령어 보간을 포함하지 않는 이것을 할 수있는 방법이 있는지 궁금해하고있다. 나는 그것이 충분한 공통점이 아니라고 생각합니다. – gcbenison
sed 부분없이 시도한 적이 없으며 테스트 사례가 없으므로 전에 테스트하지 않은 것을 게시하고 싶지 않습니다. – Learath2
관련 파일을 수정 한 가장 최근 커밋을 병합 할 수 없습니까? – dezman
@watson 나는 병합하고 싶지 않은 많은 커밋을 병합하기 때문에 그렇게 할 수 없다. 단지 하나의 파일을 터치하는 커밋의 작은 하위 집합에서 변경 사항을 끌어오고 싶을 뿐이다. – gcbenison
나는 당신이 원하는 것이 가능하다고 생각하지 않는다. 당신은 하나의 파일 만 가져야 할 것이다. 그 파일을 변경 한 최신 커밋으로부터의 모든 것, 또는 당신이 생각하는 최신 커밋으로부터의 파일들을 가져 오는 것이다. 관련성이 있습니다. – dezman