协慌网

登录 贡献 社区

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

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

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

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

答案

使用以下内容:

git checkout -b <new-branch>

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

git add <files>

并提交到您的新分支:

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

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

您没有重置原始分支,它保持不变。 <old-branch>上的最后一次提交仍然是相同的。因此,您checkout -b然后提交。

或者:

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

    $ git stash

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

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

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

如果您在编码时在主分支上进行提交 ,但现在要将这些提交移动到其他分支:

  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之外的某个位置,那么该配置将丢失。

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