2014-10-19 33 views
0

我试图使用Git的一个个人项目只是习惯了的缘故,但我进入的情况,我不知道该怎么收拾......Git的 - 让我们回到一个具体的承诺

我不记得它是怎么发生的,我想我试着回滚一些提交,但现在我的混帐是一团糟。我试过其他的东西,我不知道它们是什么,这是我不应该拥有的。

这里是它看起来像一个画面: enter image description here

我只是想回到选择提交(“每一次新的浪潮,游戏......”)。

我确定这很简单,但我迷失了所有这些分支和东西。所以如果有人能告诉我如何回到这个问题,不仅仅是为了我的工作副本,而且是在服务器上,这将会很好。

感谢:-)

+2

[恢复到以前的Git提交]的可能重复(http://stackoverflow.com/questions/4114095/revert-to-a-previous-git-commit) – rightfold 2014-10-19 10:38:20

回答

1

纵观历史,似乎你COMMITED犯下,樱桃采摘它的另一个分支,然后试图重新恢复它的两个分支。

要清理一下我首先建议你确保所有的提交(特别是包括在顶部的未提交更改),不包含你不想失去任何信息。

之后,您可以使用以下命令来丢掉其他所有东西,然后回到那一个提交。请注意,这确实会削减树,因此请确保您没有任何要保留的数据。

git reset --hard 8791cc9176 

这会将您当前的分支重置为该提交,忽略其他所有内容。所以你可能想在那里重置你的本地主人。之后,您可以删除使用git branch -D SafeSafe分支(注意是大写D能够删除未合并到其他分支的分支,除此之外的情况下,使用较低的情况下d以确保不会丢失信息)。

由于您的遥控器也更高级的状态,你可能想摆脱那些额外的提交也有。请注意,默认情况下,您不能只推送较旧的历史记录并将其替换为远程记录。相反,您必须使用git push --force origin master(或简称-f)强制推送它。尽管可以将它用于个人项目,但您应该知道,在与他人合作或存储库公开时,绝不应该这样做。这会将远程的历史记录更改为其他用户访问远程设备时无法自动处理的状态。所以他们可能会遇到冲突。这就是为什么你应该(a)总是确保你所推送的内容真的很好推送,并且(b)通过增加提交(例如,恢复提交,就像你已经在这里使用的那样),总是在远程撤销一些东西。

+0

这工作!谢谢:-) 谢谢你的详细解释,帮助我理解我做了什么来整理这件事。 – Jeahel 2014-10-19 13:52:07

0

在你的资料库的无序状态,可以使用git checkout --detach <commit>去任何承诺。例如,git checkout --detach 8791cc9将带您进入“每一次新浪潮,游戏......”提交。 git checkout主要用于从一个分支的顶端转到另一个分支,但--detach可用于检出任何提交。

如果您需要进行任何修改犯下,你需要创建一个分支出来的:git checkout -b new_branch <commit>

有关更多信息,请参阅git-checkout联机帮助页。