2012-03-15 2 views
2

팀 구성원이 많은 프로젝트에서 작업하면서, 우리는 이제 우리의 일하는 방식을 개선하려고 노력하고 있습니다. 현재 모든 작업은 integration 지점에서 이루어지며, 몇 년 전에 master에서 분기되었습니다. 하나의 이유 또는 다른 이유로, master 브랜치에서 약 600 개의 커밋이 수행되고 통합으로 병합되지 않으며, 통합에서 약 1200 개의 커밋이 master 브랜치로 병합되지 않습니다. 모든 릴리스는 통합 분기에서 완전히 분리되었으며, 마스터 분기는 1 년에 한 번 만지지 않았습니다. master 브랜치를 우리의 안정적인 브랜치로 사용하고 싶습니다. 그렇게하기 위해서, 우리는 모든 변경을 integration에서 병합해야하고 마스터에서 수행 된 분기 된 변경 사항을 유지하지 않아야합니다.git에서 이미 푸시 된 브랜치에서 모든 커밋을 제거하는 방법은 무엇입니까?

마스터 분기에서 "유효하지 않은"커밋을 제거 할 수있는 두통이 있습니까? 또는 단순히 현재 통합 위치에서 새로운 저장소 또는 다른 안정적인 지점을 만들어야합니까?

업데이트 불행히도 빠른 전달 및 원격 분기 삭제가 거부되었지만 저장소 호스팅 담당자의 응답을 기다리고 있습니다. 저는 그것이 변화하기 쉽지 않을 것이라고 생각하고 있습니다. 슬프게도 큰 회사입니다.

답변

3

, 다음 가장 쉬운 방법은 다음과 같습니다

git checkout integration 
cp -a . ../integration-source 
rm -rf ../integration-source/.git 
git checkout master 
mv .git ../integration-source 
cd ../integration-source 
git add --all 
git commit -m"massive commit to make master identical with integration" 
git push 
cd .. 
rmdir projectdirname 
mv integration-source projectdirname 

타 - 다이!

원격 삭제 할 수있는 경우 :

git push --force origin integration:master 
+0

불행히도, 업데이트 된 질문을 참조하십시오 작동하지 않습니다. –

+0

아, 당나귀. 자 이제 대체, 약간 더 복잡한 해결책을 제공했습니다. :) –

+0

좋지만, 통합에 마스터를 병합하면 원하지 않는 커밋이 모두 발생합니다. 하지만 여전히 좋은 솔루션입니다. +1 : –

1

git reset --hard은 통합 브랜치를 처음 만들 때까지 마스터 브랜치로 돌아갈 수 있어야합니다. 그것은 당신이 처음으로 갈라 졌을 때의 상태로 남게 될 것이고, 근본적으로 미래 커밋을 "제거"해야합니다.

그 시점에서 통합 분기를 master로 병합하면 동일하게됩니다. 사실, 나는 그것이 단지 충돌이없는 빠른 전진 병합 일 것이라고 생각할 것이다.

원래 분기점을 찾으려면 git merge-base master integration을 사용할 수 있습니다. 자세한 아이디어는 this Stack Overflow question을 확인하십시오. 원격 삭제를 할 수없는 경우

+0

불행하게도 비 빠르게 전달이 거부, 나는 아직도 그들이 잠시 동안 사용할 수 있는지 여부를 응답을 기다리고 있습니다. 이렇게하면, 다른 사람들이 잡아 당길 때 어떤 문제가 있을까요? –

+0

나는 빨리 감기를 강요하는 것을 주저합니다. 그들이 당기려고하면 다른 사람들의 지역 보금 자리를 망칠 가능성이 높습니다. 하지만 그것은 제 요점이었습니다 : 분기 지점으로 재설정 한 다음 통합 분기에서 마스터로 병합하면 ** 빨리 감기 병합해야합니다. 이것을 시도했는데 실패 했습니까? – Brandan

+0

그것은 빨리 감기로보고되지만 아직 600 개의 다른 커밋은 길을 잃어 버리기 때문에 빨리 감기가되지 않습니다. 적어도 그건 내 가정의 : –