将现有的、未提交的工作移至 Git 中的新分支
-
21-09-2019 - |
题
我开始了一些新功能的工作,在编码了一些之后,我决定这个功能应该在它自己的分支上。
如何将现有的未提交更改移至新分支并重置当前分支?
我想重置当前分支,同时保留新功能的现有工作。
解决方案
使用以下内容:
git checkout -b <new-branch>
这将使你的当前分支的是,创建并检出一个新的分支,并保持所有更改。然后,你可以用一个承诺:
git add <files>
和承诺新的分支:
git commit -m "<Brief description of this commit>"
在工作目录和变化的变化,指数上演不属于任何分支呢。这个变化,其中这些变化将结束英寸
您不要的重置的原来的分支,它保持原样。最后一次提交的<old-branch>
将仍然是相同的。因此你checkout -b
,然后提交。
其他提示
或者:
将当前更改保存到临时存储中:
$ git stash
基于此存储创建一个新分支,并切换到新分支:
$ git stash branch <new-branch> stash@{0}
提示:使用 Tab 键来减少输入存储名称。
如果你一直在做出承诺 在您编码时在主分支上,但您现在希望将这些提交移动到不同的分支:
将当前历史记录复制到新分支,同时也带来所有未提交的更改:
git checkout -b <new-feature-branch>
现在强制原来的“混乱”分支回滚:(无需切换到它)
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
那么该配置将会丢失。
另一种方法是使用 这种重置技术. 。但这些说明将放弃您所做的任何未提交的更改。如果您想保留它们,请先隐藏它们,然后在最后取出它们。
在常见的情况是这样的:我忘了创造新的功能,新的分支,在做所有的旧特性分支的工作。我已经COMMITED所有的“老”的工作主分支,我想我的新的分支,从“主”增长。我没有作单个提交我的新工作。 这里是分支结构: “主” - > “Old_feature”
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
如果您提交,那么也樱桃挑单提交ID。我经常这样,当我开始在师傅的工作,然后要创建一个本地分支之前,我推到了我的出身/.
git cherry-pick <commitID>
有很多是你可以用摘樱桃做的,所描述的 href="https://git-scm.com/docs/git-cherry-pick">,但是这可能是用例为您服务。
我用 @Robin 答案&列出所有我没有,
git status <-- review/list uncommitted changes
git stash <-- stash uncommitted changes
git stash branch <new-branch> stash@{1} <-- create a branch from stash
git add . <-- add local changes
git status <-- review the status; ready to commit
git commit -m "local changes ..." <-- commit the changes
git branch --list <-- see list of branches incl the one created above
git status <-- nothing to commit, working tree (new-branch) is clean
git checkout <old-branch> <-- switch back
如果回购有一个以上的藏匿处,看看哪一个适用于新的分支:
git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ...
和通过检查各个藏匿,
git stash show stash@{1}
或者检查所有藏匿在一次:
git stash list -p