2012-11-26 3 views
3

내가 참여하는 프로젝트의 일부 토픽 브랜치에서 일하고있었습니다. 일반적으로 풀 브랜치를 만들기 전에 내 브랜치를 리베이스했습니다. 그러나 이번에는 마스터의 변화로 인해 리베이스가 큰 어려움을 겪습니다. 갈등이 심하며, 수동 병합 커밋을 한 후에 더보기 흉칙하고보기 흉한 것으로 보인다. 내 지점의 머리와 두 분기에있는 최신 커밋 사이에 diff를 얻는 것을 선호합니다. 그리고 나서이 diff를 마스터의 머리에 적용하고 git add -p으로 새로운 반짝이는 커밋을 만듭니다. 그래서 내 질문은 : 그것을 달성하는 방법? 하나의 가능성은 단순히 마스터를 내 주제 분기에 병합하는 것일 수 있지만 더 우아한 해결책이 있습니까? 나는 그렇다고 믿는다.커밋간에 diff를 git의 현재 헤드에 적용하는 방법은 무엇입니까?

도움 주셔서 감사합니다.

편집 :

하나의 파일이 마스터 분기에 이동 된 내 커밋이 파일을 변경하는 (그 이전 이름의 사용). git cherry-pick --no-commit <commit>...

답변

8

사용 그럼 당신은 나와의 모든 변경 사항이 지점의 상단에 적용 커밋 얻을 것이다, 당신은 당신의 레저에 위탁 할 수 있습니다.

+0

멋진 대답을! 나는 다른 커밋에서 당신의 솔루션을 테스트했는데 정확하다. 내 경우에는 하나의 파일이 옮겨져이 시점에서 체리 피킹에 실패했다. 아무도 내 사건에 더 적합한 것을 제안하지 않으면 그것을 받아 들일 것입니다. – skalee

+0

대화 형 리베이스 'git rebase -i'로 할 수있는 것처럼 들리십니까? –

0

연속적으로 커브를 잡고 싶을 때 answer already given은 괜찮습니다.

그러나 내가 원할 경우 일반은 두 개의 선택된 커밋 사이에서 diff를 적용하는 방법에 대한 대답입니다 (이 페이지를 찾은 것처럼). 그러면 유용하지 않습니다.

사물에 이름을 부여하기 위해, 내가 커밋을 단일로 branch1commit2commit1에서은 diff를 적용하고 싶었 가정 해 봅시다 : 내 경우

나는 다음과 같은했다. commit1가 상위 또는commit2, 또는 둘의 "자손"이 될 수

참고.

그래서 내가 할 :

git status  # Ensure working directory is clean, preferably no untracked files 
git checkout -b temp-branch commit2 
git reset --soft commit1 
git commit -m "Everything from commit1 to commit2 as one commit" 
git checkout branch1 
git cherry-pick temp-branch 
    # Confirm result is what you expect 
git branch -D temp-branch 
관련 문제