使用N-last提交创建分支

时间:2011-06-18 18:06:14

标签: git

我已经克隆了存储库并做了一些提交:

git clone ...
git add
git commit
git add
git commit
git add 
git commit 

现在我已经意识到将所有提交移动到另一个新分支会更好。最好的方法是什么?

3 个答案:

答案 0 :(得分:25)

很简单,检查你的新分支,然后移动旧分支(让我们假设master并做出3次提交):

git checkout -b my_new_branch
git branch -f master HEAD~3

答案 1 :(得分:5)

knittl's answer有效,但还有其他方法可以做到这一点。

我假设您在第一次克隆此存储库时位于master,主分支将与您从中克隆的存储库中的主分支匹配。这是origin/master。由于您的问题以clone开头,这是一个公平的假设。

因此,在主分支上提交后,您现在已经领先于origin/master分支。

您要做的第一件事是创建一个新分支

git branch new_branch

注意:此命令只创建一个新分支但不切换分支。因此,masternew_branch现在指向相同的提交,但您仍然在master分支上。

接下来要做的是将当前分支(master)设置为添加提交之前的状态。这与origin/master的状态相同,因此您发出此命令

git reset --hard origin/master

这会将当前分支设置为与origin/master相同的状态。 --hard将索引和工作树设置为初始状态。有other flags,但他们没有做你想要的。 (注意:如果您的工作树中有未提交的更改,则它们现在被丢弃。在重置之前使用git stash。)

所以现在你在master上指向与origin/master相同的状态,你需要做的就是切换到新的分支:

git checkout new_branch

是的,这有点长(3个命令而不是2个),但你不必计算你需要返回多少次提交,即使你已经分支,合并,这也会有效。并且重新定位;我将在Git中解释其他做事方式。

答案 2 :(得分:2)

创建一个新分支,然后将头重置为origin / master

git branch new_branch
git reset --hard origin/master

注意:最后一个命令将丢弃您工作副本中尚未提交的任何内容。如果您想保留任何内容,请先使用git stash

然后结帐你的新分支

git checkout new_branch