我是git的新手.
我想知道为什么恢复变化是如此复杂.
1.我想知道如何从未推送更改(仅提交)
2.如何从推动的变化中恢复.
3.是否有任何良好的接口从linux启动所有这些命令(非shell使用)
谢谢
正如我们所知,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非常强大的命令,必须谨慎使用.你可以在这里阅读更多相关信息
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
7636 次 |
| 最近记录: |