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

Jav*_*aSa 0 git gitlab

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

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

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

谢谢

awo*_*yin 6

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

git diff
Run Code Online (Sandbox Code Playgroud)

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

git checkout -- filename
Run Code Online (Sandbox Code Playgroud)

文件名可以是哪里 index.html

取消暂存文件

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

git reset HEAD filename
Run Code Online (Sandbox Code Playgroud)

它实际上将该文件重置为最后一个提交阶段.

撤消提交

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

坏消息:如果你想改变最后两次提交,那么,你不能.

好消息:如果你只想改变你的最后一次提交,那么你可以.

要在上次提交中添加新文件:

git add filename
git commit --amend -am "message goes here"
Run Code Online (Sandbox Code Playgroud)

要更改上次提交消息:

git commit --amend -m "new message goes here"
Run Code Online (Sandbox Code Playgroud)

矛盾

虽然,我说除了上一次提交之外你不能改变任何东西,你可以应用修复.

一个修复是纠正你的错误并再次提交

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

git log
Run Code Online (Sandbox Code Playgroud)

你应该得到类似的东西:

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
Run Code Online (Sandbox Code Playgroud)

而只是你想要恢复的提交密钥.

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

git checkout 63a0e591ca7ff9538004a -- filename
Run Code Online (Sandbox Code Playgroud)

此命令将恢复该特定提交并将该文件放入暂存区域.就像我之前展示的那样,如果要将此文件从暂存区域中删除回工作目录,则运行:

git reset HEAD filename
Run Code Online (Sandbox Code Playgroud)

另外,要从工作目录中删除它,请运行:

git checkout -- filename
Run Code Online (Sandbox Code Playgroud)

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

好消息

您可以使用该revert命令完全还原上次提交的更改.这个命令的作用是,它添加了已删除的文件/代码行,在添加和提交之前将修改更改回来.它实质上反映了你的提交.

像之前看到的那样,你需要SHA密钥才能做到这一点.只需像以前一样抓住钥匙并运行:

git revert 63a0e591ca7ff9538004a
Run Code Online (Sandbox Code Playgroud)

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

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

还有一个reset非常强大的命令,必须谨慎使用.你可以在这里阅读更多相关信息

希望这可以帮助.