Git从提交中恢复,从推送

时间:2016-03-10 13:38:14

标签: git gitlab

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

2.如何从推动的变化中恢复。

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

谢谢

2 个答案:

答案 0 :(得分:6)

我们知道Git非常强大。 您可以通过发出以下命令来查看本地副本和存储库之间的更改/差异:

git diff

如果您尚未暂存或提交,可以通过签入该文件替换您的工作目录git:

git checkout -- filename

其中文件名可以是index.html

取消暂存文件

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

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命令完全还原上次提交的更改。这个命令的作用是,它添加了已删除的文件/代码行,在添加和提交之前将修改更改回来。它实质上反映了你的提交。

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

git revert 63a0e591ca7ff9538004a

并且git会显示提交消息的样子,可能是您选择的文本编辑器。如果您愿意,可以编辑提交消息。只需保存并关闭文件,您的工作目录应该回到以前。

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

还有reset命令非常强大,必须谨慎使用。您可以阅读更多相关信息here

希望这有帮助。

答案 1 :(得分:0)

@awoyotoyin 您不应该为要恢复到&#34;

的提交获取SHA密钥

但是,请抓住要恢复的提交的SHA密钥。

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

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