2014-01-20 1 views
4

대부분의 마스터 브랜치는 트리가 아닌 링크 된 목록처럼 보입니다. 즉, 내가 한 대부분의 합병은 빨리 감기 합병이었습니다. 나는 "A successful Git branching model" 워크 플로를 따를 것이라고 생각했다.이 워크 플로우는 빨리 감기는 병합을 피하고 대신 내 기능의 트랙과 지점 분기 조인을 남기도록 지시한다. 좋은 생각이라고 가정 해 봅시다.일반적인 git 워크 플로우와 일치하도록 git 히스토리를 다시 작성하는 방법

어떻게하면 내 나무를 가장 힘들이지 않게 고칠 수 있습니까? 내가 40 커밋이 내 나무가있다

* merged side work into branch develop 
|\ 
* * hash2 (feature branch) side work 
* * hash3 (feature branch) side work 
|/ 
* merged great feature into branch develop 
|\ 
* * hash1 (feature branch) great feature #1 - almost done 
* * hash4 (feature branch) great feature #1 - added y 
* * hash5 (feature branch) great feature #1 - added x 
|/ 
* merged documentation into branch develop 
|\ 
| * hash6 (feature branch) documentation - added more docs 
| * hash7 (feature branch) documentation - removed stuff 
|/ 
* hash8 project-wide (develop branch): added deployment descriptors.... 

:

* hash1 great feature #1 - almost done 
* hash2 side work 
* hash3 side work 
* hash4 great feature #1 - added y 
* hash5 great feature #1 - added x 
* hash6 documentation - added more docs 
* hash7 documentation - removed stuff 
* hash8 project-wide: added deployment descriptors.... 

내가 로그의이 종류를 원하는 (또는 유사한 버전) :

즉 내가 로그의이 종류가 있다고 여기서 제시 한 것보다 훨씬 더 지저분한 일이기 때문에, init과 cherry-picking 커밋으로부터 새로운 브랜치를 생성하는 것이 가장 어렵습니다. 리베이스 - 대화 형은 도움이 될만한 곳이지만, 그렇다면 확실하지 않습니다. rebase는 나무를 평평하게하고, 나는 그것을 일괄 처리해야합니다. 나는 featuredevelop으로 분기하는 것을 보여 주었지만 어떤 점에서 developmaster으로 합치는 지점에서 병합 할 수도 있습니다. 방법?

답변

0

당신이 말했듯이, 우선 당신은 커밋이 너무 많아서 역사를 다시 쓰는 것이 아니라 문제를 푸시해야합니다.

git rebase HEAD~40 -i 

여기에 당신은 을 변경하여 스쿼시은 선택할 수이 같은 전자

다른 솔루션을 선택 변경하여 커밋 메시지를 편집 (이 함께 커밋 병합) 다시 말하면, 역사는 이전의 "워크 플로"를 추적하고 원할 때마다 새 워크 스페이스를 시작할 수있는 역사 일뿐입니다. 그것이 완벽하지 않더라도 그것이 진정한 역사로 유지됩니다.

IMO, 할 수있는 한 스쿼시, 내역 조금 수정하고 새 워크 플로를 시작하십시오.

+0

나는 이것이 어떻게 작동하는지 보는 데 몇 가지 문제가 아직도 있습니다. 반드시 커밋을 스쿼시하고 싶지는 않지만, master 브랜치에서 새로운 브랜치를 생성하여 기능으로 사용하려면 마스터로 다시 병합합니다. 리베이스하는 동안 새 분기를 만들면 많은 일을하지 않는 것 같습니다. 나는 혼란 스럽다. 특정 분기에 대한 커밋을 건너 뛰고 나중에 병합해야 할 필요가 있다고 생각합니다. rebase가 보이는 단일 브랜치에서 작동하거나 잘못 사용했을 수 있습니다. – Dennis

+0

어쩌면 내가 여러 브랜치마다 하나의 브랜치를 시작한 다음이 워크 플로우를 생성하기 위해 저글링을 수행해야 할 필요가있을 것 같다. 만약 그렇다면 어쩌면 내가 가서 git history를 그대로 두어야합니다. – Dennis

+0

다른 브랜치의 마스터에서 수행 한 병합에 따라 브랜치를 정기적으로 리베이스해야합니다. ** git merge feature/branchA --no-commit --no-ff ** 병합을 검토하고 변경하거나 충돌을 해결하고 ** git commit ** – Franck