题 将现有的,未提交的工作移动到Git中的新分支


我开始研究一个新功能,经过一段时间的编码,我决定这个功能应该在它自己的分支上。

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

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


2512
2017-09-08 15:57


起源




答案:


使用以下内容:

git checkout -b <new-branch>

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

git add <files>

并提交到您的新分支:

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

工作目录中的更改和索引中的更改不属于任何分支。这会改变这些变化的结果。

你没有 重启 你的原始分支,它保持不变。最后一次提交 <old-branch> 仍然是一样的。所以你 checkout -b 然后提交。


2966
2017-09-08 15:59



为了确保,我需要在重置原始分支之前提交未完成的功能?或者,无论提交什么,都会保留那些未提交的文件? - Dane O'Connor
仅供参考:工作目录中的更改和索引中的更改不属于分支。 git checkout -b <new branch> 这些变化最终会发生变化。 - Jakub Narębski
如果您已经有一个分支,并希望将更改移动到现有分支,请结帐 stackoverflow.com/questions/556923/... - Chirantan
如果要将新分支推送到远程存储库: stackoverflow.com/questions/2765421/... - Dewayne
@JDSmith:取消提交更改 不要 属于任何分支。它们只驻留在工作目录中 git checkout ./git reset --hard 将无法恢复 去掉 他们 - knittl


或者:

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

    $ git stash

  2. 基于此存储创建新分支,并切换到新分支:

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

提示:使用Tab键减少键入存储名称。


254
2018-06-19 00:18



如果另一个分支已经存在,那么您可以通过checkout切换到它 git stash apply。 - Archonic
比公认的解决方案更好 - Jonathan Landrum
我不明白提示“提示:使用tab键减少输入藏匿名称。”这个名字不是“藏匿@ {0}”吗?我无法成功运行它。 - Herbert
为什么这比接受的答案更好 stackoverflow.com/a/1394804/754997 ? - Chris Page
我不明白为什么这比接受的答案更好 git checkout -b <new branch name> - Noitidart


如果你一直在提交 在您编写代码时在主分支上,但您现在想要将这些提交移动到另一个分支:

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

    git checkout -b <new-feature-branch>
    
  2. 现在强制原来的“凌乱”分支回滚:(没有切换到它)

    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 然后该配置将丢失。

另一种方法是使用 这种重置技术。但是这些说明将丢弃您拥有的任何未提交的更改。如果你想保留它们,先将它们藏起来并在最后取出它们。


35
2018-02-12 07:44



这回答了一个与操作问题略有不同的问题。我决定在这里提出这个答案,因为这是Google在寻找答案时带给我的地方。处理这种情况的实际问题 在这儿。 - joeytwiddle


如果你提交它,你也可以挑选单个提交ID。当我开始在master中工作时,我经常这样做,然后想要在我推送到我的原点之前创建一个本地分支。

git cherry-pick <commitID>

如上所述,你可以用樱桃挑选做很多事情 这里,但这可能是一个用例。


15
2017-11-30 20:58



将部分更改移动到新分支的更好的解决方案...因为您可以提交您想要的内容,隐藏所有其他更改,检查您要分支的分支,樱桃选择提交到新分支,返回到原始分支,硬重置一个提交,然后做一个存储弹出,添加,提交,并唱哈利路亚。 - Meredith
@Meredith,哈哈,你是这样的。这很好,除非你提前计划你的改变......谁做到了;) - password
谢谢,你刚刚保存了我的数字颈部 - Phil