将我对当前分支的所有更改移到Git中的新分支
我开始在我的主分支上进行我认为是一个小错误修复的工作。然而,它已经失去了控制,我希望我当初能创建一个单独的分支来进行开发 所以现在我想做的是:将我对当前分支的所有更改移到Git中的新分支,git,branch,Git,Branch,我开始在我的主分支上进行我认为是一个小错误修复的工作。然而,它已经失去了控制,我希望我当初能创建一个单独的分支来进行开发 所以现在我想做的是: 创建一个名为(比如)“edge”的新分支 将主机上所有已更改/未跟踪的文件移动到边缘(这样主机从我开始修复错误时起保持不变) 在edge上完成我的工作,合并回master 我该怎么做呢?如果您还没有做出任何承诺,那么您已经处于正确的位置 创建新分支:git checkout-b edge 你的文件没有改变。只需像往常一样添加和提交所需的内容 在edge上
我该怎么做呢?如果您还没有做出任何承诺,那么您已经处于正确的位置
git checkout-b edge
edge
上完成提交后,使用git checkout
和git merge edge
切换回master
为了补充JB的答案,如果您已经开始在master上提交一些最终成为“边缘”工作的内容,您可以:
git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply
如果您试图将工作从master转移到已经存在但在master之后的分支,git将不允许您切换到另一个分支。在这种情况下,请执行以下操作:
git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
严格来说,隐藏包装器不是必需的,只是用于未提交的工作更改,对吗?@HaveAGuess-right。通过“接受我所有的更改”,我还包括了当前尚未添加的更改。因此隐藏。第二行和第三行不能折叠成“git checkout-b edge master”吗?@PaulLynch考虑到那些应该在
edge
上的提交(在master
上)在master
上,是的。我已经编辑了答案。我看不出git stash
在这里有什么用处,因为使用git checkout-b
根本不会修改工作树…还没有提交任何内容,所以第一行是一个受欢迎的场景。。。哎哟,那其实挺无痛的:——)