2017-03-11 12 views
1

私は1ヶ月前に私のプロジェクトのためにGitHubのリポジトリを作成しました。私はgithubリポジトリに以前のすべての実装をプッシュしました。しかし、今では、以前のバージョンよりも安定した新しい実装を思いつきました。更新されたソリューションはより効率的です。私の目標は、以前の実装を自分のプロジェクトリポジトリに保存したいのですが、私はmajorブランチとマークされたgithubリポジトリに新しいブランチを導入するつもりです。以前の実装ではdefaultとマークしています。これを安全な方法で行うにはどうすればよいですか?私は以前の仕事を失いたくはありません。新しく導入されたブランチは、majorブランチとしてアクティブにすることができますが、前の作業を保持しているdefaultブランチを非アクティブにすることができます。どうやってやるの?誰も私に細部のワークフローを行う方法を教えてもらえますか?事前に感謝:)既存のGitHubリポジトリに新しいブランチを追加するには?

編集

一点を明確にするためには、私はgithubレポに私の新しい実装をプッシュしていませんでした。私は新しい実装を保持するブランチブランチをもう一度開きたいと思っています。このブランチはオンラインパッケージ構築サーバーに転送されます。それ以上の支援はどうですか?

答えて

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を付けます。今すぐあなたのmasterが最新の変更で更新され

    $ 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 
    

。また、次のような異なるブランチを持っている:

マスター = 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とします。 2つの支店(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

あなたはgitのコマンドを使用してあなたの答えに詳細を作るだろうか?私の目標は、私の新しい実装がすべて配置される新しいブランチを再び開くことです。あなたの答えはあまりにも抽象的です。 – datageek

+1

明確にしてください。 - デフォルトブランチ 'master'は以前の実装か更新されたimplを保持していますか? - あなたの目標は、以前のimplを他のブランチにバックアップし、デフォルトのブランチ 'master'を最新の変更で更新することです。 –

+0

私のデフォルトのブランチ 'master'は以前の実装を保持します。私は新しい実装を 'github'レポにまだプッシュしていません。私は正しいアプローチに従うようにしたい。あなたが知っているように、 'git'はこの種のものにはしばしば不平を言います。あなたが理解したいと思っています:) – datageek

関連する問題