Dan*_*nor 2982 git git-stash git-reset git-branch
我开始研究一个新功能,经过一段时间的编码,我决定这个功能应该在它自己的分支上.
如何将现有的未提交更改移动到新分支并重置当前更改?
我想重置当前分支,同时保留新功能的现有工作.
kni*_*ttl 3484
使用以下内容:
git checkout -b <new-branch>
Run Code Online (Sandbox Code Playgroud)
这将使您的当前分支保持原样,创建并签出新分支并保留所有更改.然后您可以使用以下命令进行提交:
git add <files>
Run Code Online (Sandbox Code Playgroud)
并提交到您的新分支:
git commit -m "<Brief description of this commit>"
Run Code Online (Sandbox Code Playgroud)
工作目录中的更改和索引中的更改不属于任何分支.这会改变这些更改的结束位置.
您没有重置原始分支,它保持不变.最后一次提交<old-branch>仍然是一样的.因此你checkout -b然后提交.
Rob*_*Qiu 315
或者:
将当前更改保存到临时存储:
$ git stash
基于此存储创建新分支,并切换到新分支:
$ git stash branch <new-branch> stash@{0}
提示:使用Tab键减少键入存储名称.
joe*_*dle 45
如果您在编码时在主分支上进行了提交,但现在要将这些提交移动到另一个分支:
将当前历史记录复制到新分支,同时带来任何未提交的更改:
git checkout -b <new-feature-branch>
Run Code Online (Sandbox Code Playgroud)现在强制原来的"凌乱"分支回滚:(没有切换到它)
git branch -f <previous-branch> <earlier-commit-id>
Run Code Online (Sandbox Code Playgroud)
例如:
git branch -f master origin/master
Run Code Online (Sandbox Code Playgroud)
或者如果你做了4次提交:
git branch -f master HEAD~4
Run Code Online (Sandbox Code Playgroud)警告:似乎git branch -f master origin/master将重置该分支的跟踪信息.因此,如果您已将master分支配置为推送到除此之外的某个位置,origin/master那么配置将丢失.
另一种方法是使用这种重置技术.但是这些说明将丢弃您拥有的任何未提交的更改.如果你想保留它们,先将它们藏起来并在最后取出它们.
Ale*_*rov 23
常见的情况如下:我忘了为新功能创建新分支,并且正在旧功能分支中完成所有工作.我已将所有"旧"工作提交给主分支,我希望我的新分支从"主"增长.我没有单独提交我的新作品.这是分支结构:"master" - >"Old_feature"
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
Run Code Online (Sandbox Code Playgroud)
pas*_*ord 18
如果你提交它,你也可以挑选单个提交ID.当我开始在master中工作时,我经常这样做,然后想要在我推送到我的原点之前创建一个本地分支.
git cherry-pick <commitID>
Run Code Online (Sandbox Code Playgroud)
有很多你可以摘樱桃做的,如所描述这里,但是这可能是一个用例为您服务.
选项 1(现有分支机构)
git stash (from main/any-branch)
git checkout your-existing-branch
git stash apply
Run Code Online (Sandbox Code Playgroud)
选项2(创建新分支)
git switch -c your-new-branch
Run Code Online (Sandbox Code Playgroud)
对于使用 Visual Studio Community 2022(可能还有早期版本)的用户,当您有未提交的更改然后创建新分支时,您将看到如下对话框:
只需选择第一个选项将更改带到“[your-new-branch-name]”,然后单击“继续结账”。将创建新分支,您可以继续在那里提交更改。
实际上,现在有一种非常简单的方法可以使用 GitHub Desktop 来执行此操作,但我不认为以前有此功能。
您需要做的就是切换到 GitHub Desktop 中的新分支,它会提示您将更改保留在当前分支上(将被隐藏),或者将更改带到新分支。只需选择第二个选项,即可将更改带到新分支。然后您可以照常提交。