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 ... ...
其中...首先被描述为:: 提交恢复。
我是 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 ... ...
其中...首先被描述为:: 提交恢复。