2011-08-31 2 views
1

커밋 C에서 6 개의 커밋과 줄기가있는 지점 인 mybranch가 있습니다. 커밋 C를 기반으로하는 새 분기를 만들고 싶습니다.이 분기는 mybranch의 모든 커밋을 효과적으로 포함하고 하나의 커밋으로 압축됩니다. 가장 쉬운 방법은 무엇입니까?다른 브랜치의 모든 커밋을 하나의 노드로 포함하는 형제 분기를 만들려면 어떻게해야합니까?

나는 당신이 git-push하기 전에 "스쿼시"라는 만트라 때문에 이것을해야합니다. 새로운 지사의 경우, mybranch에 대한 언급은 원격 서버에 전달되지 않기를 바란다. 푸시하는 데 사용 된 완전히 새로운 분기를 만들려는 이유는 참조 용으로 모든 커밋을 에 유지하고자하기 때문입니다.

답변

4

왜 찌그러 진 커밋 만 푸시합니까? 그게 미친 소리 야.

귀하의 질문에 대답 할 수 있지만 :

git checkout -b newbranch # checkout new branch 
git reset --soft C# move to commit C 
git add -u # add all changes to index 
git commit -m 'squashed commit' 

또 다른 가능성은 오류 복구 모두가 하나 하나에 커밋/스쿼시 rebase -i을 사용하는 것입니다 :

관심 또한
git checkout -b newbranch 
git rebase -i C# now, replace every 'pick' with 'fixup'/'squash' except the first one 

git merge --squash입니다 :

실제 병합이 발생하는 것처럼 작업 트리 및 인덱스 상태를 생성합니다 (exc ept를 사용하여), 실제로 HEAD를 커밋하거나 이동하지 마십시오. $ GIT_DIR/MERGE_HEAD를 기록하여 다음 git commit 명령으로 병합 커밋을 생성하지 마십시오. 이렇게하면 다른 브랜치 (또는 문어의 경우 더 많이)를 병합하는 것과 동일한 효과를 가지는 현재 브랜치 위에 단일 커밋을 생성 할 수 있습니다.

git checkout -b newbranch C# create newbranch at commit C 
git merge --squash mybranch 
git commit -m 'squashed commit' 
+0

감사합니다. – Phillip

관련 문제