2016-12-15 2 views
1

저는 많은 개발자가있는 꽤 큰 프로젝트에 참여했습니다. 특정 기능 개발을 위해 새로운 지점이 만들어졌습니다 (이 지점을 feature_a이라고 부름).선택적 병합/충돌 해결

masterfeature_a으로 병합하는 동안 여러 개발자가이 모듈을 담당하는 다양한 "모듈"에 여러 개의 충돌이 있습니다.

내가 책임지고있는 파일의 충돌을 독립적으로 해결할 수있는 방법과 다른 파일을 병합되지 않은 상태로 두려면 어떻게해야합니까?

+0

당신은 당신은 그 파일에 대한 뭔가를 커밋해야합니다, 병합 다른 파일을 떠날 수 없다. Git에서 커밋은 저장소에 _every_ 파일을 포함한다. 가장 좋은 것은 다른 개발자와 협력하고 함께 병합하는 것입니다. –

답변

1

기록을 다시 작성하여 각 커밋이 하나의 단일 개발자의 책임 인 커밋 목록으로 분할 한 다음 각 개발자가 자신의 코드를 master으로 다시 병합하도록 할 수 있습니다. 최종 결과는 당신이 희망 (희망) 내용입니다

# from branch feature_a : 

# create a new branch : 
$ git checkout -b merge_feature_a 

# find commit where it forked from `master` : 
$ git merge-base master feature_1 
0125638 

# reset current merge_feature_a to this commit : 
$ git reset 0125638 

# diff feature_a and merge-base to get the full list of modified files : 
$ git diff --name-only 0125638 feature_a 

# create first commit with files which are Mike's responsibility : 
$ git add <files for Mike> 
$ git commit -m "feature_a for Mike" 

# same for Sally : 
$ git add <files for Sally> 
$ git commit -m "feature_a for Sally" 

# etc ... 

# push this new branch : 
$ git push origin merge_feature_a 

# tell Mike to merge first commit, 
# when he's done tell Sally to merge second commit, 
# etc ... 

당신이 이런 식으로 얻을 것은 병합의 순서가 저지른입니다 : 여기

는이 아이디어에 대한 개요입니다.


보너스 포인트 :이 내용이 표시되도록 결합 커밋 병합 프로세스가 완료되면 병합을 만들 역사

의 정확한 지점에 커밋, 당신은 역사와 바이올린 수 있습니다 시킴으로 빨리 master 지점과 원래 feature_a 가지 모두 :

# from master : 

# rewind master to its state before any merge : 
# use '--soft' to keep every modifications in the index 
# (your next commit will have this content) 
$ git reset --soft 1e67a9bb # <- insert the hash of the original master 

# get the sha1 of the commit for feature_a : 
$ git rev-parse feature_a 
e9573881e2eff04d219e57dfd4d7739aa5c11693 

# write this hash into '.git/MERGE_HEAD' : 
$ git rev-parse feature_a > .git/MERGE_HEAD 

# commit : the presence of the MERGE_HEAD file indicates a merge commit 
$ git commit 
+1

예, 저는 같은 줄을 생각하고 있었지만 새 지점을 만드는 것을 피하려고했습니다. 문제를 해결합니다. 이에 대해 자세히 설명해 주셔서 감사합니다. – schaazzz