29

I eagerly ducked into code mode and modified some files, but neglected to branch from master first. The mods aren't so extensive that I can't redo them, but what's a good way of taking my (so far, uncommitted) changes in master and migrating them to a new branch, leaving master untouched in the end?

4

3 回答 3

41

如果尚未在任何地方提交(git status显示一堆修改过的东西,如果它也是“git add”-ed 也没关系):

$ git checkout -b newbranch

尽管有这个名字,checkout这个用法(with -b)并没有检查任何东西。该-b标志表示“创建一个新分支”,因此 git 创建分支名称并使其与当前HEAD提交相对应。然后它HEAD指向新的分支,并停在那里。

因此,您的下一个提交是 on newbranch,它的父提交是您开始修改文件时的提交。所以假设你在master,并且你有这些提交:

A - B - C       <-- HEAD=master

使checkout -b这读作:

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

后来的提交添加了一个新的提交D

A - B - C       <-- master
          \
            D   <-- newbranch
于 2013-10-26T22:16:15.333 回答
5
git branch -M master my-branch

使用-mor-M选项,<oldbranch>将重命名为<newbranch>. 如果<oldbranch>有相应的 reflog,则将其重命名为 match <newbranch>,并创建一个 reflog 条目以记住分支重命名。如果<newbranch>存在,-M必须用于强制重命名发生。

资源

接着

git fetch origin refs/heads/master:refs/heads/master

或者

git branch master my-branch  (or another ref)
于 2013-10-26T22:14:43.207 回答
3
git stash
git stash branch <branchname>
于 2013-10-26T22:12:38.317 回答