Git 从提交中恢复,从推送中恢复

Git revert from commit, revert from push

我是 git 的新手。
我想知道为什么还原更改如此复杂。
1. 我想知道如何从未推送​​的更改中恢复(仅提交)

2.How 从推送的更改中恢复。

3.Is 有任何好的界面可以从 linux 启动所有这些命令(非 shell 用法)

谢谢

正如我们所知,

Git 非常强大。 您可以通过发出以下命令查看 changes/differences 本地副本和存储库之间的内容:

git diff

如果您还没有暂存或提交,您可以通过检出该文件将您的工作目录替换为 git 的目录:

git checkout -- filename

文件名可以是 index.html

取消暂存文件

如果您不小心 added/stageg 了一个您不想要的文件,您可以通过发出以下命令取消暂存该文件:

git reset HEAD filename

它实质上将该文件重置为最后的提交阶段。

撤消提交

这有点棘手,不像上面两个那么简单。 更改以前的提交可能是致命的,并且会破坏 git 工作流程。

坏消息:如果您想更改最早的两个提交,那么,您不能。

好消息:如果您只想更改上次提交,那么您可以。

要将新文件添加到上次提交:

git add filename
git commit --amend -am "message goes here"

要更改上次提交消息:

git commit --amend -m "new message goes here"

矛盾

尽管我说过除了上次提交之外你不能改变任何东西,你可以应用修复。

一个解决方法是纠正你的错误并再次提交

另一个修复方法是将文件状态恢复到任何先前提交之前的状态。此修复需要使用由 Git 为每次提交唯一生成的 SHA 密钥来完成。所以你想要做的是获取你想要恢复到的提交的 SHA 键。要获得此密钥,您应该 运行:

git log

你应该得到类似的东西:

commit b83a5b0a0bbc3bd544cb06bdecb485a83da63008
Author: Username <exmaple@gmail.com>
Date:   Mon Mar 7 18:54:38 2016 +0100

        added limiting and offsetting results

commit 63a0e591ca7ff9538004afdbd6d07f7a3e5c417b
Author: Username <exmaple@gmail.com>
Date:   Mon Mar 7 14:12:34 2016 +0100

        removed authorization for login & logout

以及您要恢复到的提交密钥。

63a0e591ca7ff9538004afdbd6d07f7a3e5c417b 您不必复制所有内容。它是如此独特地生成,你可以只抓住前 10 个字符和 运行 这个命令:

git checkout 63a0e591ca7ff9538004a -- filename

此命令还原该特定提交并将文件放入暂存区。就像我之前展示的那样,如果你想把这个文件从暂存区移回你的工作目录,你 运行:

git reset HEAD filename

此外,要将其从您的工作目录中删除,运行:

git checkout -- filename

注意:您最后一次提交是最上面列出的日志。

好消息

您可以使用 revert 命令完全恢复上次提交的更改。此命令的作用是,它添加回已删除的 files/lines 代码,将您的修改改回添加和提交之前的状态。它本质上反映了您的提交。

如前所述,您需要 SHA 键才能执行此操作。像以前一样抓住钥匙 运行:

git revert 63a0e591ca7ff9538004a

和 git 将向您显示提交消息的外观,可能在您选择的文本编辑器中。如果愿意,您可以编辑提交消息。只需保存并关闭文件,您的工作目录就会回到之前的状态。

注意:如果您的更改很大(文件已移动、重命名等),您可能必须在此命令后合并分支。

还有一个reset命令,功能相当强大,需谨慎使用。您可以阅读更多相关信息 here

希望对您有所帮助。

@awoyotoyin 你不应该 "grab the SHA key for the commit you want to revert back to"

而是获取要还原的提交的 SHA 密钥。

https://git-scm.com/docs/git-revert 中的文档 将语法显示为 git revert ... ...

其中...首先被描述为:: 提交恢复。