首先,通过3次提交获得“你的分支超前于原点/主人”,然后我的应用程序恢复到早期更改的早期时间。
我怎样才能得到过去11个小时所做的事情?
答案 0 :(得分:419)
git reflog
是你的朋友。在该列表中找到您要进行的提交,然后重置为该提交(例如:git reset --hard e870e41
)。
(如果您没有提交更改......您可能遇到麻烦 - 提前提交,并经常提交!)
答案 1 :(得分:86)
HEAD
? HEAD
只是对当前分支中当前提交(最新)的引用
在任何给定时间只能有HEAD
。
如果您没有进行最新提交 - 意味着HEAD
指向历史记录中的先前提交,则称为已分离的HEAD。
几个选项:
git checkout
git checkout <commit_id>
git reflog
您也可以随时使用reflog
git reflog
git checkout HEAD@{...}
这会让你回到你想要的提交
git reset HEAD --hard <commit_id>
&#34;移动&#34;回到理想的承诺。
# This will destroy any local modifications.
# Don't do it if you have uncommitted work you want to keep.
git reset --hard 0d1d7fc32
# Alternatively, if there's work to keep:
git stash
git reset --hard 0d1d7fc32
git stash pop
# This saves the modifications, then reapplies that patch after resetting.
# You could get merge conflicts, if you've modified things which were
# changed since the commit you reset to.
git rebase --no-autostash
。git checkout
git checkout -b <new branch> <commit_id>
git checkout HEAD~X // x is the number of commits to go back
这将签出指向所需提交的新分支
这是可以做什么的一般模式。
答案 2 :(得分:24)
获取已删除提交的另一种方法是使用git fsck
命令。
git fsck --lost-found
这将输出类似于最后一行的内容:
dangling commit xyz
我们可以使用其他答案中建议的reflog
来检查它是否是相同的提交。现在我们可以做git merge
git merge xyz
注意:强>
如果我们已经运行fsck
命令将删除对悬空提交的引用,则无法使用git gc
返回提交。
答案 3 :(得分:4)
尝试一下, 这将显示一段时间内git中记录的所有提交
git reflog
找到所需的提交
git log HEAD@{3}
或
git log -p HEAD@{3}
然后检查它是否正确:
git checkout HEAD@{3}
这将为该提交创建一个独立的头部。添加并提交所需的任何更改
git status
git add
git commit -m "temp_work"
现在,如果要将恢复到分支的提交还原为master,则需要将此分支开关命名为master,然后合并到master。
git branch temp
git checkout master
git merge temp
这也是Git教程站点上专门用于reflog的链接: Atlassian Git Tutorial
答案 4 :(得分:3)
这件事就在今天发生在我身上,所以我正在写一些对我来说是救命稻草的东西。我的回答与@Amber 的回答非常相似。
首先,我做了一个 git reflog
并搜索了那个特定提交的哈希,然后只是复制了那个哈希并从那个分支做了一个 git cherry-pick <hash>
。这将丢失提交的所有更改都带到了我当前的分支,并恢复了我对 GIT 的信心。
祝您有美好的一天!
答案 5 :(得分:0)
答案 6 :(得分:-5)
可悲的git太不可靠了:( 我只是失去了工作2天:(
最好在执行提交之前手动备份任何内容。我只是做了“ git commit”,而git只是摧毁了我的所有更改而没有说什么。
我吸取了教训-下次先备份,然后再提交。千万不要相信git。