2013-05-28 3 views
2

우리 회사에서 일종의 git 흐름 워크 플로우를 구현했지만 실제로 모든 사람들이 실제로 git flow를 사용하고있는 것은 아닙니다. 그래서 몇 가지 딸꾹질이 있습니다. 여기 하나 있습니다.git에서 기능 분기를 가지고 있고 다른 분기에서 병합을 되 돌린 후 마스터를 병합 할 수 없습니다.

동료는 기능 지점에서 작업 중이며 현재 마스터에 있고 버그가 수정되어 있어야합니다. 그러나 그는 혼란스럽고 병합되어 마스터가 아닌 지형지 물로 발전하여 여러 가지 원치 않는 기능을 얻습니다. 그는 우리 자식 서버로 밀었다.

이제 오류를보고 해결했습니다. 우리는 병합

git revert -m 1 hismergecommit 

를 저지 복귀하고 자신의 병합을 취소 한. 그러나 주인을 지부에 합병하려고하면 병합 할 것이 없다고 말했습니다. 이것은 주인이 이전에 그의 병사보다 먼저 개발에 합병 된 사실 때문인 것 같습니다.

enter image description here

사진은 어떻게 생겼는지 아이디어를 제공합니다.

마스터에서 병합하기 전 자신의 피쳐 분기를 불량 병합 또는 마스터의 모든 커밋을 선택하기 전에 리셋하지 않고도 자신의 기능에 병합 할 수 있습니까?

편집 :

내가 ',이 경우 역사를 다시 쓰는 "위험"되지 않도록 그 서버에 지점을 추진했지만, 아무도 그것을 뽑아없는 것을 추가 할

이러한 종류의 문제가 발생할 경우 문제를 해결할 수있는 좋은 방법이 있는지 알고 싶습니다.

답변

1

는 분기를 재설정 문제점은 무엇입니까?

나는이 같은 문제를 복제 한 :

git init . 

echo line > file 
git add file 
git commit . -m "added file" 

# Create the branches 
git branch -t feature 
git branch -t dev 

git checkout dev 
echo dev-line >> file 
git commit . -m "added dev-line" 
echo test > another-file 
git add another-file 
git commit . -m "another file" 
git merge master 

git checkout feature 
echo test > feature-file 
git add feature-file 
git commit . -m "feature commit" 

# merge dev into the feature branch 
git merge dev 

# undo the merge 
git revert -m 1 e04d9159fa54aaf06e7329a7799cc58fc3334d34 


# Now we have this mess: 
* add2b8ea6583c355cc49048b65f07ce697d9c01c Revert "Merge branch 'dev' into feature" 
* e04d9159fa54aaf06e7329a7799cc58fc3334d34 Merge branch 'dev' into feature 
|\ 
| * b506d08d62b6434e1383d50eccc26d5a933703e2 Merge branch 'master' into dev 
| |\ 
| | * 18671754b703561587c3875d0f56bd99a2e08c74 another file 
| * | 978c2f52d1cd10fc27af2f0a59f295d99ac20e28 added dev-line 
| |/ 
* | ac794379e0a2038822ca772ffb3098b5270f22c2 feature commit 
|/ 
* d416cf0e4a84517871e93e0ac13a60c586353a79 added file 

# Now when we try to merge master we get 'Already up-to-date.' This is because master was already merged. 
git merge master 

IMO에서 가장 깨끗한 방법은 커밋하기 전에 기능 지점을 다시 설정하는 것입니다.

git reset --hard ac794379e0a2038822ca772ffb3098b5270f22c2 
git merge master 

* 4fa1459304668ec7b8d61eed052f9161fce02435 Merge branch 'master' into feature 
|\ 
| * 18671754b703561587c3875d0f56bd99a2e08c74 another file 
* | ac794379e0a2038822ca772ffb3098b5270f22c2 feature commit 
|/ 
* d416cf0e4a84517871e93e0ac13a60c586353a79 added file 

그런 다음 서버에 밀어 강제.

+0

서버가 강제로 강제로 밀어 넣는 것을 방지합니다. 그러나 관리자가 서버의 지점을 삭제하도록 요청할 수 있으며 로컬로 재설정 할 수 있습니다. – Boumbles

+0

밀어 넣기 (강제)없이 원격 분기를 삭제할 수 있습니다. 'git push origin : feature'는 원점에서 'feature'를 삭제합니다 (로컬 브랜치는 변경되지 않습니다). 그런 다음 브랜치를 다시 누를 수 있습니다 ;-) – siebz0r

+0

불행히도 Google 서버는 기록을 다시 작성하지 않도록 구성되었습니다. 커밋을 고칠 수 없다면 이미 끝냈다면 밀어 넣으려고 할 수 있습니다. – Boumbles

1

병합 직전에 커밋을 c1이라고합시다. 지형지 물 분기를 c1로 재설정 한 다음 마스터를 지형지 물 분기로 병합하고 결과를 푸시 할 수 있습니다.

git reset --hard c1 
git merge master 
git commit -am "some stuff" 
git pull origin feature_branch 
git push origin feature_branch