我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
当前回答
为了完整起见,我将提出前几个答复所忽略的一个明显明显的方法。
由于承诺没有被推,遥控器没有改变,因此:
删除本地仓库。 克隆远程仓库 。
有时候,如果你的高贵的Git客户告别(看着你,伊吉特),这有时是必要的。
别忘了重新承诺上次推后保存的更改 。
其他回答
我很久以前也曾写过这些话,
如何删除/ 反转 Git 承诺
基本上,你只需要做:
git 日志, 获取 SHA hash 的前七个字符, 然后进行 git return < sha> , 然后再进行 git push -- force 。
您也可以使用 Git 返回命令, 恢复此命令如下: git 返回 < sha> - m - 1, 然后按 git 键 。
git 重置 -- 混集、 -- soft 和 -- hard 的区别
先决条件 : 当修改您存储库中的现有文件时, 最初将此项修改视为未阶段化的 。 为了实施更改, 需要分阶段进行, 这意味着使用 git 添加将其添加到索引中 。 在一次任务操作中, 被显示的文件会被添加到索引中 。
让我们举一个例子:
- A - B - C (master)
总部指向C,指数与C吻合。
-- 软
当我们执行 git 重设 -- soft B 时,我们执行 git 重设 -- soft B , 目的是删除承诺 C, 将主机/ HEAD 指向主机/ HEAD 指向 B。 主机/ HEAD 现在将指向 B, 但索引仍然与 C 。 当执行 git 状态时, 您可以看到在承诺 C 中索引的文件是分阶段的。 此时执行 git 承诺将产生与 C 相同变化的新承诺 。
-- 混合混合
执行 git 重新设置 -- mixed B 。 执行时, 主机/ HEAD 会指向 B , 索引也会因使用混合旗子而修改为 B 匹配 。 如果我们在此点运行 git 承诺, 自索引与 HEAD 匹配后, 就不会发生任何变化 。 工作目录中仍然有变化, 但是由于它们不在索引中, git 状态显示它们未显示为未显示的 。 要执行它们, 您会按常态添加并承诺 。
--- 硬
执行 git 重置 -- hard B 执行时, 主人/ HEAD 将指向 B 并修改您的工作目录 C 中添加的更改和所有未承诺的更改将被删除。 工作副本中的文件将与承诺 B 匹配, 这将导致永久删除所有在承诺 C 加上未承诺的更改中所做的更改
希望对可用用于 Git 重置命令的旗帜进行这种比较, 将有助于有人明智地使用这些旗帜。 请参考这些旗帜以获取进一步的详情链接1 (链接) 。
如果存储库是在当地承诺的,但尚未被推到服务器上,那么另一种粗糙/佣人解决它的方法将是:
Git 在另一个位置克隆仓库。 将修改( 文件/ 目录) 从原始仓库复制到这个新的仓库。 然后承诺并按下新仓库的修改。 用这个新的仓库替换旧的仓库 。
如果你们在本地做出你们不喜欢的事,而他们还没有被推倒,而你们却可以把事情重现为以往的善事。这好像坏事从未发生过。下面是这样的:
在您的终端中( 终端、 Git Bash 或 Windows 命令提示) , 浏览到您的 Git repo 的文件夹中。 运行 git 状态, 并确保您有干净的工作树。 每个承诺都有一个独特的散列( 看起来像 2f5451f ) 。 您需要找到最后一件好事的散列( 您想要返回到哪个地方 ) 。 这里有两个地方您可以看到要承诺的散列 : 在 GitHub 或 Bitbucket 网站或网站的承诺历史中 。 在您的终端中( 终端、 Git Bash 或 Windows 命令快递) 运行命令 git 日志 -- 在线, 一旦您知道最后一件好事的仓列( 您想要返回到哪个地方) , 请运行以下的命令( 将 2f5451f 与您的承诺重写 ) :
git reset 2f5451f
git reset --hard 2f5451f
注意 : 如果您确实重置承诺, 将会删除, 但更改将显示为未承诺, 允许您访问代码 。 这是最安全的选项, 因为也许您想要一些代码, 现在您可以做出一些好的更改和新承诺 。 通常您会想要撤销承诺, 丢弃代码, 这正是 Git 重置 -- hard 所做的 。
使用此命令( 在顶部的日志 1 中, 这是最新命令) 获取上次的 身份确认 :
git log
获取执行 ID (GUID) 并运行此命令 :
git revert <commit_id>