2017-01-19 47 views
1

我有我的代码的问题,所以我回滚到最后一次提交使用这个命令:硬重置后Git分支在哪里?

git reset --hard <7-digit-hash> 

现在,当我发出命令“混帐分支”我只是看到我现在的分支,不是我的主分支和我有另一个分支。他们发生了什么?有什么方法可以改变事情,以便继续像以前一样查看我所有的分支机构?我的代码问题消失了,我已经恢复了这个分支,所以我想保留它,提交它,并将它推回到我的远程。这里发生了什么?我如何做这两件事? git分支文档没有真正解释发生了什么。

回答

2

首先,检查git statusgit branch -avv的输出结果:这会使您在当前状态下看到更多的可见性。

如果在git仓库中缺少任何东西(commit,branch,tag),请检查git reflog:你会让它们回到那里。

如果您已将当前分支取出,则其头部已正确重置为您提到的SHA1,因此此部分没有问题。

+0

谢谢。 git状态并没有告诉我任何有用的信息。我做了“git branch -avv”,我可以看到我的本地“开发”分支(我正在开发的那个分支)和远程/源/头,开发人员和主人。然后我做了“git co master”,以确保我的主分支(哪个dev是后代)仍然在那里,并且它说“切换到一个新的分支'主'',这让我很担心。 git是否创建了一个完全*新的*主分支,而不是切换到我的原始主分支?那真的很糟糕。我只是想提交具有我恢复的工作代码的开发者,然后将开发者合并到我原来的主人。 – William

+0

@Dave您是否看到主人或出身/主人?同样,如果你有一个本地主分支,你仍然可以在git reflog中看到它。 – VonC

+0

@Dave这听起来像你以某种方式删除了'master'的本地副本。当你完成'git co master'时,你创建了一个名为'master'的新的本地分支,它与'origin/master'位于同一个位置,它被称为“远程跟踪分支”。换句话说,它是远程仓库中'master'的本地副本。如果你在删除本地'master'分支之前做了'git push',那么'origin/master'与'master'的提交方式相同。你可以使用'git log --all --oneline --decorate'来查看每个分支的位置。 –

2

git reset只影响当前分支。即使那样,它只会移动分支。它不会删除它。它也不会删除任何其他分支。

不知怎的,你用其他命令删除了master的本地副本。当您执行git co master时,您创建了一个名为master的新本地分支,它位于origin/master的相同位置。要了解origin/下的分支,您需要了解更多关于所谓的“远程追踪分支”的信息。这些是远程存储库中分支的本地副本。请注意,他们是本地副本。当您执行与远程交互的命令(如git push,git pullgit fetch)时,它们会更新。

如果您在删除本地master分支之前做了git push,则origin/mastermaster的提交方式相同。您可以使用git log --all --oneline --decorate来查看每个分支的位置。这将帮助您知道master是否回到了正确的提交。由于dev已经在您的原始master之前,它将包含所有提交。如果您想移动master,则可以使用git checkout mastergit reset --hard <SHA1>来执行此操作。