我不小心将错误的文件提交给Git,但我还没有将提交推送到服务器.
如何从本地存储库中撤消这些提交?
我是Git分支复杂的新手.我总是在一个分支上工作并提交更改,然后定期推送到我的远程源.
在最近的某个地方,我重置了一些文件以使它们脱离提交暂存,后来又做了一个rebase -i去除几个最近的本地提交.现在我处于一种我不太了解的状态.
在我的工作区域,git log显示我所期待的 - 我在正确的火车上,我不想要的提交,以及那些新的,等等.
但是我只是推送到远程存储库,并且有什么不同 - 我在rebase中杀死的一些提交被推送,而本地提交的新提交不存在.
我认为"master/origin"与HEAD分离,但我不是100%清楚这意味着什么,如何使用命令行工具将其可视化,以及如何修复它.
我想丢弃提交后完成的所有更改<commit-hash>.所以我做了:
git reset --hard <commit-hash>
Run Code Online (Sandbox Code Playgroud)
现在我想对我的遥控器做同样的事情.我怎样才能做到这一点?之后我做了一些提交(并推送)<commit-hash>,我只想丢弃它们.只是在某种程度上出现了严重的错误,我不想让它变得更糟.(
我基本上要退我origin/master来<commit-hash>
有没有办法恢复提交,以便我的本地副本保留在该提交中所做的更改,但它们在我的工作副本中变为未提交的更改?回滚提交会将您带到上一次提交 - 我想保留所做的更改,但我将它们提交到了错误的分支.
这没有被推动,只是承诺.
最后一次提交,HEAD和我在目录中可以看到的文件状态之间似乎有区别.
什么是HEAD,我该怎么办?我应该避免哪些错误?
git的新手,已经搞砸了.
我已经提交并将一些更改推送到远程开发机器.我需要恢复一个旧版本,但保持"糟糕的进展"到目前为止继续在一个单独的分支上工作;
我在想这样做:
推送到远程
完成对测试物的测试
在第3步和第5步之间,其他开发人员可能会提交和推送,我担心这可能导致"合并悲剧" - 无论如何,这可能是一个正确的方法吗?
更新:
这里的主要问题在于2)
这里,关于主题:"将工作分解为主题分支" http://learn.github.com/p/undoing.html
他们建议:
通过这样做,其他开发人员仍然可以:
$ git commit (在开发分支上)
我可以结账测试并解决它直到合并时间.
尽管你有各种各样的选择,但感觉这是一个很好的方法.但是,如果在我们推动之后可以做到这一点,则没有说明?
请注意以下内容:由于我做了这些更改而且我搞砸了所有内容,到目前为止还没有其他人在存储库上工作过.所以,如果我还原工作目录,没有人会注意到.
这不是一个主要问题,只是我想知道是否可能.
假设我们有两个提交,abcd123并且wxyz789发生在非相邻的,分开的地方,远在回购历史中.现在让我们说我们想要还原它们.干
git revert abcd123 wxyz789
Run Code Online (Sandbox Code Playgroud)
将导致两个单独的提交,一个恢复abcd123,另一个恢复wxyz789.
这一切都很好,但是如果我们想要在两个提交中修复的错误在逻辑上是链接的,并且为了自我记录的目的,我们想做一个单独的提交包含一个单词" 我现在打破了一些东西 " 我正在恢复文件x,y和z "评论?有没有这样做的git命令?
(我当然知道有可能创建一个提交,我只需手动修复所有更改然后推送.这对于所有的不良原因都是痛苦的.)
我承诺并推了一些坏事.如何强制将我的本地仓库还原为HEAD~7,并重新提交,以便HEAD现在处于该版本?Git docs让我很困惑.
谢谢!
我决定退回一些提交,因为我遵循的路径是错误的.所以我检查了Added cordova to .gitignore提交,并做了一些修改.如下图所示:

现在,当我推送新修改时,会显示一条错误消息:
error: src refspec (detached from aad6423) does not match any.
我怎么能告诉git丢弃以前的提交(紫色)并继续我当地的HEAD作为主人?
我在git中更改了一个图像文件,它是2次提交之前.我如何回到之前的2次提交?
使用最少量的命令通过命令行执行此文件恢复的最简单方法是什么?