我已经克隆了存储库并做了一些提交:
git clone ...
git add
git commit
git add
git commit
git add
git commit
现在我已经意识到将所有提交移动到另一个新分支会更好。最好的方法是什么?
答案 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
注意:此命令只创建一个新分支但不切换分支。因此,master
和new_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