2013-06-27 5 views
19

일반적인 개발 워크 플로는 b 브랜치를 체크 아웃하고, 잔뜩 커밋 한 다음 모든 커밋을 하나로 스쿼시합니다 (여전히 b에 있음).Git 스쿼시가 모두 충돌없이 커밋됩니다.

그러나 모든 커밋을 스쿼시하는 과정 중에 여러 단계에서 자주 충돌이 발생합니다.

나는 본질적으로 하나가 그 커밋에 지점을 변경하려는 내가 몇 가지 검색을 해봤지만 내가 정확히 무엇을 발견하지 않았습니다 b

에 커밋 최종시의 저장소의 상태를 나타냅니다 내가 찾고 있어요. 우리가 병합하기 전에 squashed feature branch를 테스트하기를 원하기 때문에 나는 merge --squash을 원하지 않습니다.

+0

수 커밋 기능 지점에서 메시지 저자를 커밋하여 커밋 [git에서 병합 - 스쿼시와 rebase의 차이점은 무엇입니까?] (http://stackoverflow.com/questions/2427238/in-git-what-is-the-difference-between-merge-squash- and-reba se) –

+0

그 질문에서 나는'G'가'stable'에 있지 않기를 바란다. 나는 여전히 그것이 지부에 있기를 바란다. 내가 뭔가를 놓치고 있는지 확실하지 않다 –

+0

그냥 체리 - G를 선택하지 못했습니까? –

답변

40

커밋 정보가 필요하지 않은 경우 소프트 리셋 만하면됩니다. 그런 다음 파일은 그대로 남아 있고 커밋 할 때이 커밋은 재설정 된 커밋의 맨 위에 있습니다. 아마도, 커밋 공예 다시 그런

git merge-base HEAD BRANCH_YOU_BRANCHED_FROM 

그런

git reset --soft COMMIT_HASH 

:

(가)에 다시 커밋 찾으려면

git commit -am 'This is the new re-created one commit' 
+0

smart! 나는 그것을 좋아한다 –

+0

이것은 매우 시원하다. –

5

이의 대답 simlar입니다 Rasmus하지만 세 단계로 나뉘어 항상 작동해야합니다 :

$ git merge feature1 
$ git reset --soft [email protected]{1} 
$ git commit -c feature1 

설명 : 변화가 개최 유지하지만 기존의 머리에 다시

    1. 병합하고 해결 충돌은
    2. 모든 변경이 최신
  • 관련 문제