我正在尝试将Git用于个人项目,只是为了习惯它,但我遇到了一个我不知道如何整理的情况......
我不记得它是怎么发生的,我想我试图回到一些提交,但现在我的git是一团糟。我尝试了其他一些我不知道它们是什么的东西,我不应该这样做。
以下是一个如何显示的屏幕:
我只想回到选定的提交(“每次新浪潮,游戏......”)。
我确信这很简单,但我迷失了所有这些分支和东西。因此,如果有人能告诉我如何回到这一点,不仅是我的工作副本,还有服务器上的,那将是不错的。
谢谢: - )
答案 0 :(得分:1)
看着那段历史,似乎你提交了那个提交,在另一个分支上挑选了它,然后又尝试在两个分支上恢复它。
为了清理它,我首先建议你确保所有这些提交(特别是包括那些未提交的更改在顶部)不包含任何你不想丢失的信息。
之后,您可以使用以下命令抛弃所有其他内容,然后返回到那个提交。请注意,这确实会削减树,因此请确保您没有要保留的任何数据。
git reset --hard 8791cc9176
这会将当前分支重置为该提交,忽略其他所有内容。所以你可能想在那里重置你的本地主人。之后,您可以使用Safe
删除git branch -D Safe
分支(请注意大写D
,以便能够删除未合并到其他分支的分支 - 对于所有其他情况,请使用小写d
以确保您不会丢失信息。)
由于你的遥控器也处于更高级的状态,你可能也希望摆脱那些额外的提交。请注意,默认情况下,您不能只推送较旧的历史记录并将其替换为遥控器。相反,您必须使用git push --force origin master
(或简称为-f
)强制推送它。虽然可以将它用于您的个人项目,但您应该知道,在与他人合作或您的存储库公开可用时,您绝不应该这样做。这会将远程历史记录更改为访问远程用户的其他用户无法自动处理的状态。所以他们可能会遇到冲突。这就是为什么你应该(a)始终确保你所推送的东西真的很好推,并且(b)总是通过添加提交来撤消遥控器上的东西(例如,恢复你提交的提交)已经在这里使用过了。)
答案 1 :(得分:0)
在存储库的无序状态下,使用git checkout --detach <commit>
进行任何提交。例如,git checkout --detach 8791cc9
带您进入&#34;随着每一个新浪潮,游戏......&#34;承诺。 git checkout
主要用于从一个分支的尖端转到另一个分支,但--detach
对于检出任何提交都很有用。
如果您需要对该提交进行任何修改,则需要创建一个分支:git checkout -b new_branch <commit>
。
git-checkout联机帮助页中的更多信息。