在当前分支上进行所有更改,然后将其移至Git中的新分支


105

我开始研究我认为是master分支的次要错误修复程序。但是,它已经失去控制,以至于我希望自己创建一个单独的分支来首先进行开发。

所以现在我想做的是:

  1. 创建一个名为(例如)“ edge”的新分支
  2. 将母版上所有已更改/未跟踪的文件移到边缘(这样,从我启动错误修复起,母版就保持不变)
  3. 边完成我的工作,再合并回大师

我怎样才能做到这一点?

Answers:


103

如果您尚未提交任何内容,那么您已经处于正确的位置。

  1. 创建一个新分支: git checkout -b edge
  2. 您的文件没有更改。只是git add什么需要和提交如常。
  3. 当你做了承诺上edge,切换回mastergit checkoutgit merge edge

还没有做出任何承诺,因此第一线是值得欢迎的景象...,这实际上是很
轻松的

87

要添加到JB的答案中,如果您已经开始对master进行一些提交,而最终以“优势”努力了,那么您可以:

git stash
git checkout -b edge master
git branch -f master SHA1_before_your_commits
git stash apply

储藏包装器不是严格必需的,只是为了进行未承诺的工作变更,对吗?
HaveAGuess 2011年

4
@HaveAGuess对。通过“接受所有更改”,我还包含了当前尚未添加的更改。因此藏匿。
VonC

第二和第三行不能折叠成“ git checkout -b edge master”吗?
Paul Lynch 2013年

@PaulLynch考虑这些提交(上master)应该是上edge master的,是的。我已经编辑了答案。
VonC

我看不到git stash这里有什么用,因为使用git checkout -b根本不会修改工作树...
user1686

13

如果您试图将工作从master转移到已经存在但在master后面的分支,则git不会让您切换到另一个分支。在这种情况下,请执行以下操作:

git stash
git checkout oldBranch
git merge master
git checkout master
git stash apply
git checkout oldBranch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.