저는 많은 개발자가있는 꽤 큰 프로젝트에 참여했습니다. 특정 기능 개발을 위해 새로운 지점이 만들어졌습니다 (이 지점을 feature_a
이라고 부름).선택적 병합/충돌 해결
master
을 feature_a
으로 병합하는 동안 여러 개발자가이 모듈을 담당하는 다양한 "모듈"에 여러 개의 충돌이 있습니다.
내가 책임지고있는 파일의 충돌을 독립적으로 해결할 수있는 방법과 다른 파일을 병합되지 않은 상태로 두려면 어떻게해야합니까?
저는 많은 개발자가있는 꽤 큰 프로젝트에 참여했습니다. 특정 기능 개발을 위해 새로운 지점이 만들어졌습니다 (이 지점을 feature_a
이라고 부름).선택적 병합/충돌 해결
master
을 feature_a
으로 병합하는 동안 여러 개발자가이 모듈을 담당하는 다양한 "모듈"에 여러 개의 충돌이 있습니다.
내가 책임지고있는 파일의 충돌을 독립적으로 해결할 수있는 방법과 다른 파일을 병합되지 않은 상태로 두려면 어떻게해야합니까?
기록을 다시 작성하여 각 커밋이 하나의 단일 개발자의 책임 인 커밋 목록으로 분할 한 다음 각 개발자가 자신의 코드를 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
예, 저는 같은 줄을 생각하고 있었지만 새 지점을 만드는 것을 피하려고했습니다. 문제를 해결합니다. 이에 대해 자세히 설명해 주셔서 감사합니다. – schaazzz
당신은 당신은 그 파일에 대한 뭔가를 커밋해야합니다, 병합 다른 파일을 떠날 수 없다. Git에서 커밋은 저장소에 _every_ 파일을 포함한다. 가장 좋은 것은 다른 개발자와 협력하고 함께 병합하는 것입니다. –