忘记在git中创建分支,需要将更改从主分支移动。

31

我急切地进入了代码模式并修改了一些文件,但是忘记先从主分支创建一个新分支。这些修改不是很复杂,所以我可以重新做一遍,但是有没有好的方法可以将我的(到目前为止,未提交的)更改从主分支迁移到一个新的分支中,在最终不影响主分支的情况下呢?


1
这个问题似乎不是主题,因为在谷歌搜索标题后可以得到很好的答案。 - jthill
14
我通过谷歌搜索发现了这个问题。我是否陷入了无限循环? - phoog
3个回答

46

如果还没有在任何地方提交(git status 显示有很多被修改的内容,如果已经通过 "git add" 添加也没关系):

$ git checkout -b newbranch
尽管命名为checkout,但这种用法(使用-b)并不会检出任何内容。标志-b表示“创建新分支”,因此git创建了分支名称并使其对应于当前的HEAD提交。然后它将HEAD指向新的分支,并停在那里。
因此,您的下一个提交是在newbranch上进行的,该分支的父提交是您开始修改文件时所在的提交。所以假设您在master上,并且您有这些提交:
A - B - C       <-- HEAD=master

checkout -b 的意思是创建并切换到一个新分支:

A - B - C       <-- master, HEAD=newbranch

后续的一次提交添加了一个新的提交D

A - B - C       <-- master
          \
            D   <-- newbranch

6
git branch -M master my-branch

使用-m-M选项,将会把<oldbranch>重命名为<newbranch>。如果<oldbranch>有相应的reflog,则会将其重命名为匹配<newbranch>,并创建一个reflog条目来记住分支重命名。如果<newbranch>存在,则必须使用-M来强制进行重命名。
git fetch origin refs/heads/master:refs/heads/master

或者

git branch master my-branch  (or another ref)

1
这是一种不错的方式来更改已经提交到新分支 my-branch 上的东西。 - torek

3
git stash
git stash branch <branchname>

这样做是可行的,但 git checkout -b <branchname> 更简单(而且更快,它不必撤销更改然后重新应用它们)。 - torek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接