我急切地进入了代码模式并修改了一些文件,但是忘记先从主分支创建一个新分支。这些修改不是很复杂,所以我可以重新做一遍,但是有没有好的方法可以将我的(到目前为止,未提交的)更改从主分支迁移到一个新的分支中,在最终不影响主分支的情况下呢?
我急切地进入了代码模式并修改了一些文件,但是忘记先从主分支创建一个新分支。这些修改不是很复杂,所以我可以重新做一遍,但是有没有好的方法可以将我的(到目前为止,未提交的)更改从主分支迁移到一个新的分支中,在最终不影响主分支的情况下呢?
如果还没有在任何地方提交(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
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)
my-branch
上的东西。 - torekgit stash
git stash branch <branchname>
git checkout -b <branchname>
更简单(而且更快,它不必撤销更改然后重新应用它们)。 - torek