CakePHP 2.0.0을 다운로드하고 압축을 푼 다음 git init
, git add .
, git commit
과 같은 것을 실행하여 저장소를 만드는 것으로 가정합니다. 어쩌면 당신은 그것의 위에 약간 편집을했다 (당신이하지 않았다면, 그냥 버리고, github repo를 복제하고 그로부터 작업하십시오).
중요한 것은 zipball에서 시작한 저장소가 있다는 것입니다.
이제 github 리모컨을 추가하고 가져 왔을 때 github은 "경고 : 공통 커밋 없음"이라고 경고했습니다. 이것이 의미하는 것은 Github의 저장소와 로컬 저장소 사이에 커밋 루트가 없다는 것입니다.
a1 -- b1 -- c1 -- d1 -- e1 -- f1 master
r1 -- s1 -- t1 -- u1 -- v1 -- w1 github/tags/2.0.4
병합이 진행되면 두 저장소간에 관계가 없습니다. 충돌이 있기 때문에 모두 다른 콘텐츠로 같은 파일을 추가하는 것이 나타납니다.
가장 간단한 방법은 rebase
입니다. 2.0.4 태그 위에 작업하십시오. Zip 파일을 추가 한 첫 번째 커밋 인 을 제외하고을 리베이스하면됩니다. 첫 번째 커밋이 a1이고 지사가 마스터라고 가정 해 봅시다.
먼저 마스터에게 태그를 만드십시오. 무언가가 끔찍하게 잘못되면 해당 태그로 복원 할 수 있습니다.
git tag tmp/master master
그런 다음 리베이스하십시오.
git rebase --onto tags/2.0.4 a1 master
각 커밋은 2.0.4 릴리스에서 커밋으로 다시 작성됩니다.
a1 -- b1 -- c1 -- d1 -- e1 -- f1 tmp/master
r1 -- s1 -- t1 -- u1 -- v1 -- w1 github/tags/2.0.4
\
- b2 - c2 - d2 - e2 - f2 - g2 - h2 master
각 커밋을 패치로 저장하고 다른 분기에 다시 적용하는 것과 같은 리베이스를 생각해보십시오. 당신은 a1과 b1 사이의 차를 가져 와서 새로운 위탁을 만드는 w1의 위에 그것을 저지하십시오. 그런 다음 diff b1 대 c1을 작성하고 b1을 작성하여 c2를 작성하십시오. 등등.
첫 번째 커밋이 변경되지 않은 zip 파일이 아닌 경우 모두 손실되지 않습니다. 동일한 절차를 사용할 수 있지만 첫 번째 작업을 복구해야합니다. 먼저 첫 번째 커밋과 clean 2.0.0 사이의 diff를 추출해야합니다.
git diff tags/2.0.0 a1 > first_commit.patch
그런 다음 새 작업을 유지하기 위해 2.0.4 태그에서 새 분기를 만듭니다.
git checkout tags/2.0.4
git checkout -b newmaster
패치를 적용하고 커밋하십시오.
git apply first_commit.patch
git commit -a
이제 newmaster에는 2.0.4에 첫 번째 작업 비트가 포함되어 있습니다.
이제 rebase
master는 이전과 같지만 2.0.4에 직접 적용되는 대신 newmaster 상단에 있습니다.
git tag tmp/master master
git rebase --onto newmaster a1 master
newmaster를 삭제할 수 있습니다.
git branch -d newmaster
추신 :이 모든 것이 저장소를 시각화 할 수 있으면 더 명확 해집니다. OS X에서 GitX(L)은 repo를 볼 수있는 훌륭한 방법입니다.
zip 파일에서 CakePHP를 다운로드했지만 git 저장소에 병합하는 것에 대해 이야기했습니다. 저장소 란 무엇입니까? 그것이 어떻게 생겨 났습니까? – Schwern
케이크 버전을 직접 변경 했습니까? 그렇지 않다면 나는'git fetch; git checkout 2.0.4' (처음에는 cakephp를 가진 git clone이 있다면). –