我写了一些代码来实现项目的两个新功能,但我将更改提交给master。我现在意识到这是一个错误,因为其中一个功能运行良好,另一个功能不正常。
我想将工作功能代码保留在master中,但是从master中删除非工作功能代码。
我希望在新分支中拥有项目的当前版本(具有这两个功能)。
我只是从master创建一个新的分支,然后从master中删除非工作特性的代码,但我担心提交基本上会以错误的顺序,当我将分支合并回在某些时候掌握,git将丢弃非工作特性的代码,因为新分支将落后于删除该代码的提交。
有更好的方法吗?
答案 0 :(得分:1)
首先,您应该使用
将当前主分支保存为开发分支git checkout -b development
接下来,你需要恢复你的主人(因为主人不是为了开发,除非你是唯一的开发人员并且你知道你在做什么,否则认为它是神圣不可侵犯的)。
git branch -D master && git checkout -b master --track origin/master
如果您没有上游源存储库(github / bitbucket / gitlab等),则可以使用git reset HEAD
,或者使用git checkout -b master <SHA_of_last_sane_commit_on_master>
。
现在,使用
为master中的feature 1创建一个新的分支,并为该分支创建feature to 1git checkout -b feature_1
git cherry-pick SHA_of_first_commit_for_feature_1
git cherry-pick SHA_of_second_commit_for_feature_1
# and so on.
接下来,以与上面相同的方式为要素2创建新分支。
这假设你的提交不会重叠2个功能,如果有,你必须手动更改文件的内容。
现在,合并时,您需要做的只是将feature_1
合并到master
,然后将feature_2
合并到master
。