我做了五个提交,我想在推送之前把它们都变成一个提交。出于某种原因,我决定尝试用一种不同于我通常使用的方法来实现。
FWI: 我试图按照这里的说明来做。http:/gitready.comadvanced20090210squashing-commits-with-rebase.html。 .
下面我会放很多细节,但你可能想跳到问题的底部,在那里我放了 git reflog
因为我怀疑这才是重要的。
所以我是这样做的--我把所有的修改都提交了,然后我做了.com。
git rebase -i HEAD~5
然后我看到了文本编辑器,里面显示了提交的内容,我错了,我现在意识到,我把第一列的 "pick "值都改成了 "squash"。
然后我看到了一条错误信息。我不记得错误信息说了什么,但我想应该是 "你没有提交要使用"。
在那一刻,我又回到了提示,当我试图重复.com的时候,我得到的信息是:"你没有提交使用"。
git rebase -i HEAD~5
我得到的信息是 。
It seems that there is already a rebase-merge directory, and
I wonder if you are in the middle of another rebase. If that is the
case, please try
git rebase (--continue | --abort | --skip)
If that is not the case, please
rm -fr /home/foo/dev/bar/.git/rebase-merge
and run me again. I am stopping in case you still have something
valuable there.
然后我看到了这个答案 https:/stackoverflow.coma12163247364088。 这建议做 。
git reset --soft HEAD^
我做了(我希望我没有)。在我做完之后。
git status
显示了许多未提交的文件,虽然
git diff
显示没有变化。无论如何,我然后做了一个
git commit
现在,我已经失去了我所有的chnages在过去的五次提交!
git reflog
显示(这只是最上面的)。
3f80e4b HEAD@{0}: commit: Decorator demo added
1888dd9 HEAD@{1}: reset: moving to HEAD^
7d6228e HEAD@{2}: checkout: moving from master to 7d6228eb9b03d0c45acf7c66e662220213cf4fb9
705736f HEAD@{3}: commit: Snapshot commit - squash later
75db0c3 HEAD@{4}: commit: Snapshot commit - squash later
b70b50f HEAD@{5}: commit: Snapshot commit - squash later
d970a62 HEAD@{6}: commit: Snapshot commit - squash later
0f24e88 HEAD@{7}: commit: Snapshot commit - squash later
7d6228e HEAD@{8}: commit: Move some standard code into its own module and tidy up .
1888dd9 HEAD@{9}: commit: Early version of the decorators demo
所以问题是,标有 "快照提交--稍后粉碎 "的提交是我想合并成一个提交的。
HEAD@{2}和HEAD@{1}是我在合并 "快照提交--稍后粉碎 "的过程中做的事情。提交 HEAD@{0} 是我在重启和重置之后做的提交。
如果有必要的话,最后推送的提交是 HEAD@{8}。
所以,我希望回到 "705736f "的提交,然后,最好再做一次合并提交,只是这次要让它正常工作。
如果能恢复 "快照提交--稍后压制 "的工作,我会非常高兴。
如果能得到建议,我将感激不尽。
我比较喜欢的方法是在你想拿回来的东西上贴一个标签,比如一个分支。
git branch recover 705736f
这时你可以检查一下(这是一个新的本地分支),确保你已经恢复了你想要的东西。
git checkout recover
git log # or gitk, or whatever
这是一个新的分支标签,指向旧的(base-attempt前)提交。
你的新提交 (Decorator demo added
)将在另一个分支上,这(在图形日志查看器中,如 gitk --branches
或 git log
与 --graph
)后分叉。Early version of the decorators demo
的提交。
如果你愿意 "失去 "新的提交(除了在重新记录中),你可以在重新记录中强制将当前分支重置为旧的提交。
git reset --hard 705736f
(而不是创建一个新的分支指向新的提交) 705736f
). 再次,运行 git log
看看是否是你想要的地方(你甚至可以在你想要的地方 git log 705736f
首先!)。)
只要这样做。
$ git reset --hard HEAD@{3}
你就会回到你最后一次提交的点。从那时起,你可以采取相应的行动。