2017-06-15 60 views
0

我在github上创建了一个仓库,然后将其克隆到我的机器上。我做了多个提交,但后来决定我应该对新分支进行更改,而不是掌握。所以我从最近的提交中创建了一个新分支,并且继续在新分支上进行更多更改。我把新的分支推回到我的回购叉上,一切似乎都很好。使用git,我如何将主分支移回到提交之前的状态?

我在本地机器上所做的更改让我无法回到回购。至少,我没有把他们推为“主人”。所以当我查看master时,它表示它在源/主设备之前提交了18条。

我想“备份”我的本地主人,以匹配回购中主人的状态。我想保留所做的所有提交,但只能通过其他(cwworking)分支。

没有其他人使用我的git hub回购,所以不存在混淆其他任何开发者的问题。

这不就是告诉git使主分支“指向”正确的更老的提交吗?我想让我的本地机器上的主人指向0b58da67,就像它在我的回购中一样。我怎么做?这是不是很简单?

+0

你想让指针返回到远程/主指针,还是你想推动你不能从新的本地分支推送的主控上的变化? – dhaliman

回答

0

下面的答案假设你错误地提交了一些提交(比如说3)到master,你实际上打算进入一个新的分支。然后,您分叉master,推,但现在你有三个不必要的提交顶部master。您可以使用此核弹的三个提交:

git checkout master 
git reset --hard HEAD~3 

在这一点上,你应该能够从远程拉最新master分支,没有困难:

git pull origin master 

一般来说,git reset --hard应谨慎使用。但在这种特殊情况下,没有其他人看到这三次提交,并且你不希望他们在那里。

+0

工作。谢谢。它太复杂了,我无法分辨哪个命令是正确的。我认为重置--hard可能是要走的路,但不知道我的提交(现在在其他分支的日志中)可能会丢失,或者我不明白的其他内容可能会搞砸。 –

+0

@CurtWelch是的...... Git确实有一条学习曲线,如果你不确定,你是正确的。最终,你只会看到很少的提交链表。在这种情况发生之前,你有堆栈溢出:-) –

+0

只是为了让其他读者清楚,因为我想回去的提交很多提交,我只是使用这种形式的git reset:“reset --hard 0b58da67d0866dc9475c529e88182825a6b8e210 '重置为来自日志的特定提交 –

0

最容易重置这么多的提交(18)并指向分支到远程头,是要在本地删除分支,并再次获取远程分支。

git checkout otherbranch 
git branch -d master 
git fetch 
git checkout master 
+0

这很简单,我不会这样想,但它确实发生在我身上,我可以删除整个本地目录树并再次克隆存储库以获取 –

+0

我不觉得我明白git用来存储修订版的底层数据结构的全部复杂性,所以我从不相信像“删除分支”这样的命令没有意想不到的副作用,它会混淆我的存储库。如果我对存储库数据结构有深入的了解,那么我最好能够总结出每个命令的真正作用。 –

相关问题