2012-09-05 173 views
2

我在(不分支)分支做了一个提交,然后做了一个拉,意识到我在错误的分支上做了一个'结帐主'和另一个拉。我现在无法找到我原来的提交推入主分支,我不能切换到(不分支)。有没有办法来恢复我的提交或得到差异?恢复(没有分支)git提交

+2

也许 - 是否'git reflog'显示提交 - 你可能会把它拉到一个真正的分支? –

+1

@AdrianCornish这很可能是正确答案:请在下面张贴它的投票。 –

+0

@AlexBrown Done –

回答

5

git reflog会列出您所做的所有提交,并且(例如)git merge [email protected]{1}会将其合并回您的分支。

$ git reflog 
734713b... [email protected]{0}: commit: fixed refs handling, added gc auto, updated 
d921970... [email protected]{1}: merge phedders/rdocs: Merge made by recursive. 
1c002dd... [email protected]{2}: commit: added some blame and merge stuff 

git rev-parse

<refname>@{<n>}, e.g. [email protected]{1} 

的Ref后跟后缀@与封闭在一对括号(例如{1}{15})的序规范指定了第n个先前值REF。

请注意,git rebase -i也会这样做。

Revision Selection页提到:

重要的是要注意的是,reflog信息是严格的地方是很重要的 - 这是一个日志你已经在你的仓库做了什么。
引用在其他人的版本库中不会相同;并且在您最初克隆存储库后,您将拥有一个空的reflog,因为您的存储库中尚未发生任何活动。

配置gc.reflogExpire指定何时删除比此时更早的reflog条目; 默认为90天

+0

这通常是正确的,虽然可能会因git reflog配置而失败。 –

+0

@AlexBrown添加了一条警告。 –

+0

它保留了大量日志 - 我认为120天是默认值。 –