2011-02-02 3 views
0

나는 하나의 인기있는 PHP 포럼 소프트웨어를 개선하기 위해 노력하고 있습니다. 한 달 전, 버전 1.0에 대한 자식과 저장소를 시작했습니다 나는 1 월 (커밋을)를 위해이 소프트웨어를 개선하는 작업을하고 그 이후Git 병합 이전 수정 버전 및 새로운 수정되지 않음

git init . 
(copied files here of version 1.0) 
git add . 
git commit 

합니다. 이제 새로운 공식 버전을 사용할 수 있습니다. 버전은 1.1입니다. 내 코드를 제거하지 않고 포럼의 새로운 기능을 병합해야합니다. 어떤 자식 명령을 사용해야합니까?

나는 다음과 같은 만들려고 :

1) git branch vendor 
2) git checkout vendor 
3) delete old files and put files of version 1.1 
4) git checkout master 
5) git merge vendor 

을하지만 것을했을 때, 나는 내 모든 수정을 잃었다. 내가 어디가 잘못 됐니? 감사합니다.

답변

2

이상적으로는 작업중인 소프트웨어에 이미 공개적으로 액세스 할 수있는 저장소가 있어야하며 git-svn 또는 다른 가져 오기 도구를 사용해야합니다. 그것이 어떤 이유로 든 가능하지 않다고 가정하면 다음과 같이 추천합니다.

"vendor"라는 브랜치를 만듭니다.하지만 버전 1.0을 추가 한 커밋부터 시작합니다 (루트 커밋 인 것처럼 보입니다). 새 버전이 나타날 때마다 해당 지점을 확인하고 모든 것을 삭제하고 릴리스에서 덤프하십시오 (말한 것처럼). 중요한 부분 : 에는이 지점의 변경 사항이 포함되지 않습니다.. 그런 다음 마스터 분기에 자유롭게 병합 할 수 있습니다. 새 릴리스로 인해 많은 수정 작업이 발생할 수 있으므로이 워크 플로와의 병합 충돌이 자주 발생할 수 있습니다. 직업의 위험.

귀하의 역사는 궁극적으로 다음과 같이한다 : 당신이 잘못된 곳

x [1.0] ------- x [1.1] ------------ x [1.2] (vendor) 
\    \     \ 
    o - o - o - o - o - o - o - o - o - o (master) 

굵은 텍스트, 방법에 의해입니다. 당신은 당신의 마스터 지점에서 공급 업체의 분기를 시작, 그래서 당신은 최선을 다하고 1.1, 당신의 역사는이처럼 보였다 때

x [1.0] - o - o - o - o - o (master) - x [1.1] (vendor) 

을 그래서 자연스럽게 마스터로 공급 업체를 합병 할 때, 당신은 정확하게 1.1으로 돌아가 셨습니다.

+0

고마워. 하나의 명령으로 버전 1.0을 추가 한 커밋에서 시작하여 "vendor"라는 브랜치를 만들 수 있습니까? –

+1

@user : 생성하고 체크 아웃하기 위해서 :'git checkout -b vendor '. 그것을 생성하기 위해서는 :'git branch vendor '. 그 커밋의 SHA1을 찾으려면, gitk에서 그것을 검사하거나, 멋지게 될 것이다 :'git log --oneline | 꼬리 - n 1'. – Cascabel

관련 문제