我开始了一项新功能的工作,经过一段时间的编码,我决定该功能应该在其自己的分支上。
如何将现有未提交的更改移至新分支并重置当前分支?
我想重置当前分支,同时保留新功能的现有工作。
我开始了一项新功能的工作,经过一段时间的编码,我决定该功能应该在其自己的分支上。
如何将现有未提交的更改移至新分支并重置当前分支?
我想重置当前分支,同时保留新功能的现有工作。
Answers:
使用以下内容:
git checkout -b <new-branch>
这将使您当前的分支保持不变,创建并签出新分支,并保留所有更改。然后,您可以在文件中进行更改以提交:
git add <files>
并使用以下命令提交到您的新分支:
git commit -m "<Brief description of this commit>"
工作目录中的更改和索引中暂存的更改尚不属于任何分支。这将更改这些修改的终止分支。
您无需重置原始分支,它会保持原样。最后一次提交<old-branch>
将保持不变。因此,您checkout -b
然后提交。
Git 2.23添加了新的switch
子命令,以消除由于过载checkout
(切换分支,还原文件,分离HEAD等)而引起的一些混乱。
从此版本的Git开始,将上述命令替换为:
git switch -c <new-branch>
行为是相同的,并且保持不变。
git checkout -b <new branch>
其中变化这些变化将结束英寸
git checkout .
/ git reset --hard
将无法恢复地将其删除
或者:
将当前更改保存到临时存储区:
$ git stash
基于此存储区创建一个新分支,然后切换到新分支:
$ git stash branch <new-branch> stash@{0}
提示:使用Tab键可以减少键入存储名称的麻烦。
git stash apply
。
git checkout -b <new branch name>
git add -A
藏起来之前不需要。
如果您在编码时一直在主分支上进行提交,但是现在您想将这些提交移动到另一个分支,这是一种快速的方法:
将您当前的历史记录复制到新分支,同时也带来所有未提交的更改:
git checkout -b <new-feature-branch>
现在,强制原始的“ 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
结束时进行。
常见的情况如下:我忘记为新功能创建新分支,并且在旧功能分支中进行了所有工作。我已经将所有“旧”工作都提交给master分支,并且我希望我的新分支能够从“ master”中成长。我还没有提交新工作。这是分支结构:“ master”->“ Old_feature”
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
如果提交,则还可以选择单个提交ID。当我开始在master上工作时,我经常这样做,然后想在我的原点/之前创建一个本地分支。
git cherry-pick <commitID>
有很多你可以摘樱桃做的,如所描述这里,但是这可能是一个用例为您服务。
这可能对所有使用GIT的工具都有帮助
命令
切换分支-它将您的更改移至新分支。然后,您可以提交更改。
$ git checkout -b <new-branch>
乌龟
右键单击您的存储库,然后使用TortoiseGit-> Switch / Checkout
源树
使用“签出”按钮切换分支。单击分支后,您将在顶部看到“签出”按钮。当前分支中的更改将自动应用。然后,您可以提交它们。
我用@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