我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
我无意中把错误的文件给了Git, 但还没有把承诺推到服务器上。
我如何从当地存储库撤销这些承诺?
当前回答
在这种情况下,"重置"命令就是你最好的朋友:
git reset --soft HEAD~1
重置将会将您当前的 HEAD 分支倒带到指定的修改 。 在以上的例子中, 我们希望回到当前修改之前的修改 - 有效地取消我们最后的承诺 。
注意 -- soft 旗号 : 这样可以确保未撤销修改的更改被保存。 在运行命令后, 您会发现您的工作副本中这些更改是未承诺的本地修改 。
如果您不想保留这些更改, 请使用 -- 硬旗 。 确定只有在您确定不再需要这些更改时才这样做 。
git reset --hard HEAD~1
其他回答
引用: 如何撤销 Git 中的最后一次承诺 ?
如果您已经安装了 Git 扩展名, 您可以很容易撤销/ 撤销任何任务( 您可以从这里下载 Git 扩展名 ) 。
打开 Git 扩展名, 右键单击您想要返回的承诺, 然后选择“ 回溯承诺 ” 。
调
将打开弹出( 见下文截图)
调
选择“自动创建一项承诺”,如果您想要直接进行已恢复的更改,或者如果您想要手动进行已恢复的更改,则保留未选中的框,单击“撤销此承诺”按钮。
替换您的本地版本, 包括您对服务器版本的更改。 这两行代码将迫使 Git 调用并覆盖本地版 。
打开命令提示并浏览到 Git 工程根。 如果您使用视觉工作室, 请单击团队、 同步并点击下面的“ 打开命令提示 ” (见图像) 。
调
一旦进入CMD, 继续使用以下两个指示。
git fetch --all
那你就做
git reset --hard origin/master
这将覆盖 Git 服务器上的现有本地版本 。
在这种情况下,"重置"命令就是你最好的朋友:
git reset --soft HEAD~1
重置将会将您当前的 HEAD 分支倒带到指定的修改 。 在以上的例子中, 我们希望回到当前修改之前的修改 - 有效地取消我们最后的承诺 。
注意 -- soft 旗号 : 这样可以确保未撤销修改的更改被保存。 在运行命令后, 您会发现您的工作副本中这些更改是未承诺的本地修改 。
如果您不想保留这些更改, 请使用 -- 硬旗 。 确定只有在您确定不再需要这些更改时才这样做 。
git reset --hard HEAD~1
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 reset --hard <commit_hash>
确保您有备份的更改, 以防万一, 因为它是一个困难的重置, 这意味着它们会丢失( 除非您更早隐藏) 。