2012-11-03 2 views
1

안정 분기의 변경 사항을 개발 분기로 다시 병합합니다. 나는 이것이 "진짜"병합이되기를 원한다. 내가 할 때 병합을 보여 주어야한다. git --graph --oneline.커밋 메시지를 브랜치에서 마스터로 푸시하지 않고도 진짜 자식 병합을 수행 할 수 있습니까?

catch는 지점에서 모든 메시지를 커밋하고 싶지는 않지만 내 병합 메시지 만 커밋합니다. (우리 개발자의 커밋 메시지는 원격 훅에 의해 시행되는 특정 패턴을 따라야 만하지만 지사의 일부 커밋은 준수 할 필요가없는 '릴리스'사용자로부터 온 것입니다.)

분기에서 커밋 메시지를 푸시하지 않고 "실제"병합을 수행 할 수있는 방법이 있습니까? 내가 원하는

git merge -s recursive -X ours --no-commit 1.0_BRANCH 

그리고 여기 내 (소독) 그래프가 정확히 어떤, 내가 커밋 후 모습입니다 : 여기

내가 (마스터에서) 순간에 병합하고있어 어떻게

* b3492a7 - (HEAD, master) DEV-3: Merging patch fix onto master <graham> 
|\ 
| * eec2ef6 - (origin/1.0_BRANCH, 1.0_BRANCH) [maven-release-plugin] prepare for next development iteration <release> 
| * c14dee4 - (application-1.1) [maven-release-plugin] prepare release application-1.1 <release> 
| * 40687a4 - DEV-3: Fix to go into the patch <graham> 
| * 4e71c98 - [maven-release-plugin] prepare for next development iteration <release> 
| * c8828bb - (application-1.0) [maven-release-plugin] prepare release application-1.0 <release> 
| * 46a9a59 - [maven-release-plugin] copy for branch 1.0_BRANCH <release> 
* | 5ca3ec6 - (origin/master, origin/HEAD) DEV-2: First feature commit of next release <graham> 
* | bd797d3 - [maven-release-plugin] prepare for next development iteration <release> 
|/ 
* afff00f - [maven-release-plugin] prepare branch 1.0_BRANCH <release> 
* b9329fb - DEV-1: Last feature commit before release <graham> 

내 문제는 밀어 넣으려고 할 때 eec2ef6의 커밋 메시지가 준수하지 않고 릴리스 사용자가 아니기 때문에 원격 훅이 밀어 넣기를 거부합니다. b3492a7에서 메시지를 병합하여 병합을 수행 할 수 있습니까? 아니면 병합을 스쿼시해야합니까 (그래프에서 병합으로 표시되지 않는다고 생각됩니다)?

답변

2

커밋의 모든 부모에 대한 원격 지식 없이는 병합을 푸시 할 수 없습니다.

당신은 스쿼시를해야합니다. 스쿼시를 사용하면 해당 브랜치의 기록을 삭제하고 병합 할 수 있습니다. 이상적인 경우 원격 지혜 훅을 변경하여 불량 항목을 조금 더 똑똑하게 만들 수 있습니다. 아마도 '릴리스'사용자의 모든 커밋을 무시할 수 있습니다.

+0

후크를 지능적으로 만드는 것이 좋습니다. 후드 아래에서, 내가 실제로 그 커밋을 또 다시 푸시하고 있지만, 다른 브랜치에서 실행하고있는 것인가, 아니면 내가 리모트에게 그 커밋들을 병합했다고 말하고있는 것인가? –

+0

커밋이 원격 끝에 이미있는 경우 다시 커밋되지 않습니다. 그러나 후크는 커밋이 이미 원격 장치에 존재했는지 여부를 알지 못합니다. 병합의 한 쪽을 무시하거나 다른 브랜치에서 도달 할 수있는 커밋을 무시하도록 후크에서 일부 논리를 작성하고 시도 할 수 있지만 '릴리스'사용자를위한 IMO 특수 대소 문자는 더 쉬울 것입니다. – jbowes

+0

후크는 구현 방법에 따라 커밋이 이미 존재했는지 여부를 추측 할 수 있습니다. 업데이트 훅으로 설정되면, 서버에 푸시되고있는 일련의 커밋마다 한번 호출됩니다 – Daniel

0

현재 모델은 'release'사용자 만 기능 분기를 dev으로 병합 할 수 있음을 의미합니다. 개발자 만이 이러한 병합을 적절히 관리 할 수 ​​있기 때문에 실용적이지 않습니다.

당신이 후크 개선 할 수 있다면, 당신은 "Have remote git repository refuse merge commits on push"에 제시된 것과 유사한 알고리즘을 사용할 수 있습니다 부모 중 하나가 거기에 <release>이있는 경우 git rev-list --parents <OLD>..<NEW>를 사용하여
, 당신은 확인할 수 있으며, 허용 할 수 그.

관련 문제