2017-03-11 1 views
1

나는 한 달 전에 나의 프로젝트를위한 GitHub 리포지토리를 만들었고 나의 이전 구현은 내 github repo에 모두 푸시했다. 그러나 이제는 이전 버전보다 업데이트 된 솔루션이 더 안정적이라는 새로운 구현 방법을 생각해 냈습니다. 내 목표는 내 프로젝트 저장소에 이전 구현을 유지하려는 반면, major 분기로 표시된 github 저장소에 새 분기를 도입하고 이전 구현을 default으로 표시하려고합니다. 이 문제를 어떻게 안전하게 해결할 수 있습니까? 이전 일을 잃어 버리고 싶지 않아 새로 도입 된 지점을 major 지점으로 활성화하고 이전 작업을 보유한 default 지점을 비활성화 할 수 있는지 확인하고 싶습니다. 어떻게해야합니까? 누구나 세부 워크 플로를 수행하는 방법을 가르쳐 줄 수 있습니까? 사전 :기존의 GitHub 저장소에 새로운 분기를 주요 분기로 추가하는 방법은 무엇입니까?

편집에 감사 :

한 점을 명확히하기 위해, 나는 github의 repo에 내 새로운 구현을 추진하지 않았다. 내 새 구현을 보유하고있는 지사 지사를 다시 열고 싶습니다.이 지사는 온라인 패키지 구축 서버로 전달됩니다. 더 이상 도움을 주시겠습니까?

답변

3

나는 내 이전 작업을 잃고 싶지 않아, 나는 확실 새로 도입 된 지점은 프로젝트 구현

당신은 따를 수 semantic versioning 주요 지점으로 활성화 될 수 있도록합니다. 이전 구현의 최신 코드 인 태그 (예 : v1.0.0)을 제공하면됩니다. 그런 다음 병합 기본 분기 마스터로 업데이트/최신 변경 사항을 병합하십시오.

앞으로는 이전 버전을 백업/가져오고 싶다면 v1.0.0 태그로 체크 아웃하십시오.

  1. , 분기 (예를 들어, feature)에 최신 변경을 커밋 추가합니다. 따라서 귀하의 feature 지점에는 모든 최신 변경 사항이 보관됩니다.

    $ git checkout -b feature 
    $ git add . 
    $ git commit -m 'new implementation' 
    $ git push origin HEAD     # push to remote 'feature' branch 
    
  2. 이제 체크 아웃-master 지점 및 이전 구현의 커밋의 상단에 태그을 제공합니다.

    $ git checkout master 
    $ git tag -a v1.0.0 -m "my previous implementation" 
    $ git push --tags     # push v1.0.0 tag to remote 
    
    $ git checkout -b prev-impl-v1.0.0 # create a new branch ('prev-impl-v1.0.0') from the tag 'v1.0.0' which holds your previous implementation 
    $ git push origin HEAD    # push 'prev-impl-v1.0.0' branch 
    
  3. 이제 기본 분기 master에 업데이트 된 변경 (feature 지점에 존재) 병합합니다. feature 분기를 master 분기로 병합합니다. 업데이트 된 구현을 완료 한 경우 new tag을 새 구현의 커밋 상단에 지정합니다.

    $ git checkout master    # checkout master branch 
    $ git pull origin feature   # merge feature with master 
    
    $ git tag -a v2.0.0    # give a new tag ('v2.0.0') on the new implementation 
    
    $ git push origin HEAD   # update the remote 'master' 
    $ git push --tags     # push 'v2.0.0' tag to remote 
    
    $ git checkout -b new-impl-v2.0.0 # create a new branch from tag 'v2.0.0' tag 
    $ git push origin HEAD   # push 'new-impl-v2.0.0' branch 
    

는 이제 master은 최신 변경 사항으로 업데이트됩니다. 또한 다음과 같은 가지가 있습니다.

마스터 = new-impl-v2.0.0 = 새로운 impl을 유지합니다. (v2.0.0 태그)
prev-impl-v1.0.0 = 이전 impl 포함. (v1.0.0 개발자 태그)

지금 당신은 당신의 master에서 (말하자면 feature2)에 새로운 지점을 만들고 필요한 경우 다음 구현을 위해 그 지점에서 작업 할 수 있습니다

$ git checkout master 
$ git checkout -b `feature2` 

# do changes for your next implementation 

이 마무리 것 다음 구현 feature 분기와 마찬가지로 # 3을 반복합니다.

이전 구현을 백업하려는 경우 checkout to the specific tag 만 있으면됩니다. 이전 구현을 확인하기 위해 체크 아웃 할 수있는 두 개의 분기 (prev-impl-v1.0.0 & new-impl-v2.0.0)도 있습니다.

$ git checkout v1.0.0   # checkout to v1.0.0 = previous implementation 
$ git checkout v2.0.0   # checkout to v2.0.0 = new implementation 

# create a new branch from any checked out tag/commit 
$ git checkout -b <branch-name> # create & checkout a new branch from the tag 

More about Semantic Versioning

+0

당신은 자식 명령 답 자세한 내용을 만들 수 있을까요? 내 목표는 모든 새 구현을 배치 할 새 분기를 다시 여는 것입니다. 당신의 대답은 너무 추상적입니다. – datageek

+1

명확한 설명 - 기본 분기'master'는 이전 구현 또는 업데이트 된 impl을 보유하고 있습니까? - 당신의 목표는 이전의 impl을 다른 브랜치로 백업하고 기본 브랜치 인'master'를 최신 변경으로 업데이트하는 것입니다. –

+0

내 기본 분기'master'는 이전 구현을 유지합니다. 나는 새로운 구현을'github' repo로 아직 푸시하지 않았습니다. 나는 올바른 접근 방식을 따르고 싶다. 아시다시피'git'는 때때로 이런 종류의 것들에 대해 많은 것을 불평합니다. 당신이 이해할 수 있기를 바랍니다 :) – datageek

관련 문제