我在一个月前为我的项目创建了GitHub
存储库,并将我以前的所有实现都推送到我的github
存储库中。但是,现在我想出了一个新的实现,它比以前的版本更稳定,更新的解决方案更高效。我的目标是,我希望将我之前的实现保留在我的项目存储库中,同时,我打算在我的github repo上引入标记为major
分支的新分支,同时将之前的实现标记为default
。我怎样才能以安全的方式实现这一目标?我不想丢失以前的工作,我想确保新引入的分支可以作为major
分支处于活动状态,同时取消激活default
分支以保存以前的工作。我怎样才能做到这一点?谁能指导我如何处理细节工作流程?在此先感谢:)
修改:
为了澄清一点,我没有将我的新实现推送到github
repo。我想重新打开包含新实现的分支新分支,这个新分支将转发到在线包构建服务器。还有什么进一步的帮助吗?
答案 0 :(得分:2)
我不想失去以前的工作,我想确保新引入的分支可以作为主要分支活动
您可以在项目实施中关注semantic versioning。只需在您之前实施的最新提交上提供标记(例如v1.0.0
)。然后使用默认分支主机合并您的更新/最新更改。
现在,如果您想要退回/获取以前的版本,请查看标记v1.0.0
。
添加,提交您对分支的最新更改(例如feature
)。因此,您的feature
分支包含所有最新更改。
$ git checkout -b feature
$ git add .
$ git commit -m 'new implementation'
$ git push origin HEAD # push to remote 'feature' branch
现在结帐到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
现在将更新的更改(存在于feature
分支中)合并到默认分支master
中。将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
已根据您的最新更改进行了更新。你也有不同的分支,如:
master = new-impl-v2.0.0 =拥有新的impl。 (v2.0.0标签)
prev-impl-v1.0.0 =保留之前的impl。 (v1.0.0标签)
现在,您可以从feature2
创建一个新分支(例如,master
)并在该分支上工作以进行下一次实施(如有必要)
$ git checkout master
$ git checkout -b `feature2`
# do changes for your next implementation
当您完成下一次实施时重复#3 ,就像您对feature
分支一样。
如果您想以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