2013-03-26 2 views
1

Nvie의 git 브랜치 모델에 따라, 같은 'release'브랜치를 양쪽 모두에 병합 한 후에 왜 앞과 뒤 각각 '개발'과 '마스터'로 끝나는 것입니까? 동일한 '릴리스'지점이 각각에 병합되면 마스터하고 개발하지 않아야합니다.Git Workflow, Nvie Branching Model Ahead And Behind

x 84a628d  (origin/develop, develop) Merge branch 'release-v3.0.1' into develop 
|\ 
| | x 2e4d60b (HEAD, v3.0.1, origin/master, master) Merge branch 'release-v3.0.1' 
| | |\ 
| | |/ 
| |/| 
| x | 716ce96 (release-v3.0.1) Version 3.0.1 
|// 
x | fe3b54d  Some more more code 
x | 3683892  Some more code 
x | 8c0b835  'develop' branch code 
|/ 
x d051b54  (v3.0) Baseline merge. Merge remote-tracking branch 'origin/master' 

$ 자식 로그 원산지/마스터^원산지/I가 실종 무엇^원산지/마스터 개발/

commit 84a628d96653ed196faa6387c8b208badf23aa75 
Merge: fe3b54d 716ce96 
Author: Todd 
Date: Tue Mar 26 11:31:53 2013 -0400 

Merge branch 'release-v3.0.1' into develop 

commit 2e4d60b7d6760b4f6b2328ab06150b020b0d279f 
Merge: d051b54 716ce96 
Author: Todd 
Date: Tue Mar 26 11:27:59 2013 -0400 

Merge branch 'release-v3.0.1' 

$의 자식 로그 기원을 개발? 모든 origin/master에서 도달 커밋하지만 origin/develop

git log origin/develop ^origin/master 

이 명령에서 모두 표시이 origin/develop에서 도달 커밋하지만 origin/master

에서 이러한 위의 명령 모두의 출력이 보인다

답변

2
git log origin/master ^origin/develop 

는이 명령은 표시 한 그래프와 일치해야합니다.

2 개 분기 내용의 차이점을 찾으려면 git diff 명령을 사용해야합니다.

git diff origin/master..origin/develop 

당신이 다른 파일의 목록을 원하는 경우에, 당신은 --name-status 옵션을 사용할 수 있습니다 : 자식에

git diff --name-status origin/master..origin/develop 

을, A의 커밋 SHA1이의 위탁 부모 기준으로 계산됩니다 SHA1, 커밋 메시지, 시간 소인 및 기타 많은 정보를 제공합니다. 동일한 release-v3.0.1 브랜치를 masterdevelop에 병합 했더라도 2 개의 다른 시점에 2 개의 독립적 인 병합으로 처리했습니다. 이것은 분명히 두 가지 모두에 대해 동일한 커밋 SHA1을 생성하지 않습니다.

옵션 1 :

git checkout master: 
git merge release-v3.0.1 

git checkout develop: 
git merge master 

git checkout master 
# This would be a fast-forward merge 
git merge develop 

옵션 2 :

git checkout develop: 
git merge release-v3.0.1 

git checkout master: 
git merge develop 

git checkout develop 
# This would be a fast-forward merge) 
git merge master 

이 끝날 것이 방법 대신했던해야합니까

는 다음 중 하나입니다 masterdevelop 브랜치가 모두 동일한 c를 가리키는 경우 아냐.

masterdevelop 또는 다른 방법으로 병합하고 다른 분기에서 빨리 감기 병합을 수행해도 동일한 상태가 될 수 있습니다.

git checkout master 
git merge develop 

git checkout develop 
# This would be a fast-forward merge 
git merge master 
+1

감사합니다. Tuxdude! Nvie의 브랜칭 모델을 따르고 개발 브랜치에서 지속적인 작업을 위해 릴리스 지사를 제공하려는 경우 master/develop와 md/master를 직접 병합하는 것이 무엇입니까? ... [성공적인 Git 분기 모델] (http : // nvie. – Todd

+0

@Todd - 표시된 그래프는 Nvie의 분기 모델을 따르지만 차이점을 파악하는 데 사용 된 명령은 정확하지 않습니다. com/posts/a-successful-git-branching-model/단지'git log' 명령을 사용하여 커밋을 체크하는 것이 아니라'git diff developmaster' 명령을 사용하여 2 트리의 내용을 비교해야합니다. 개발과 마스터를 직접 병합하는 것에 대해 이야기 한 이유는 분기 포인터가 릴리스에서 병합 된 후 동일한 커밋을 가리 키도록 만드는 것입니다. 당신이 지점을 유지하는 방법은 완전히 당신에게 달려있다;) – Tuxdude

+0

Ahhh ... 'diff'는 나의 경우를 기대하고 있었던 것처럼 제로 차이를보고한다! 그래서 ... 커밋에 대한 '로그'리포트와 'diff'엔티티 (노드, 분기, 버전 등) 사이의 절대적인 변경 사항을보고합니다 !! 그래서 GitHub의 'Branches'탭은 병합 된 분기 간의 '로그'및 커밋 델타의 결과를보고하는 것으로 보입니다. 불행히도 내가 기대했던 것이 아니고 미숙 한 사람들에게는 분명하지 않다. 감사합니다 Tuxdude! (죄송합니다. 응답하지 않습니다.) – Todd