将现有未提交的工作移至Git中的新分支

2019/12/01 20:31
阅读数 728

我开始了一项新功能的工作,经过一段时间的编码,我决定该功能应该在其自己的分支上。

如何将现有未提交的更改移至新分支并重置当前分支?

我想重置当前分支,同时保留新功能的现有工作。


#1楼

使用以下内容:

git checkout -b <new-branch>

这将使您当前的分支保持不变,创建并签出新分支,并保留所有更改。 然后,您可以使用以下命令进行提交:

git add <files>

并使用以下命令提交到您的新分支:

git commit -m "<Brief description of this commit>"

工作目录中的更改和索引中暂存的更改尚不属于任何分支。 这将更改这些更改的终止位置。

您无需重置原始分支,它会保持原样。 <old-branch>上的最后一次提交将保持不变。 因此,您checkout -b然后提交。


#2楼

或者:

  1. 将当前更改保存到临时存储区:

    $ git stash

  2. 基于此存储区创建一个新分支,然后切换到新分支:

    $ git stash branch <new-branch> stash@{0}

提示:使用Tab键可以减少键入存储名称的麻烦。


#3楼

如果提交,则还可以选择单个提交ID。 当我开始在master上工作时,我经常这样做,然后想在我的原点/之前创建一个本地分支。

git cherry-pick <commitID>

有很多你可以摘樱桃做的,如所描述这里 ,但是这可能是一个用例为您服务。


#4楼

如果您在编码时一直在主分支上进行提交 ,但是现在您想将这些提交移动到另一个分支,这是一种快速的方法:

  1. 将您当前的历史记录复制到新分支,同时也带来所有未提交的更改:

    git checkout -b <new-feature-branch>
  2. 现在,强制原始的“ messy”分支回滚:(无需切换到该分支)

    git branch -f <previous-branch> <earlier-commit-id>

    例如:

    git branch -f master origin/master

    或者,如果您进行了4次提交:

    git branch -f master HEAD~4

警告: git branch -f master origin/master重置该分支的跟踪信息 。 因此,如果您已将master分支配置为推送到origin/master以外的其他位置,则该配置将丢失。

警告:如果在分支后重新设置基准,也存在危险,如此处所述 。 避免这种情况的唯一方法是使用Cherry-Pick创建新的历史记录。 该链接描述了最安全的防呆方法 。 如果您有未提交的更改,您可能需要git stash开始和git stash pop底。


#5楼

常见的情况如下:我忘记为新功能创建新分支,并且在旧功能分支中进行了所有工作。 我已经将所有“旧”工作都提交给master分支,并且我希望我的新分支可以从“ master”中成长。 我还没有提交新工作。 这是分支结构:“ master”->“ Old_feature”

git stash 
git checkout master
git checkout -b "New_branch"
git stash apply
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部