git (source tree) 如何恢复未暂存的文件
git (source tree) how to recover unstaged files
我提交并推送了一些不起作用的代码,我认为这将是学习如何回滚到以前的 commit/pull 的好机会。
我对这个提交使用了reset master,这似乎有效,但后来我注意到无效的提交仍然存在,它说我落后于最新提交 1日期提交(包含无效代码的提交)。
然后我做了一些可能完全愚蠢的事情,我使用了 删除 按钮来完成我落后的提交(我不想要的早期代码)。在此之后,提交仍然存在,但现在我未提交的更改列表只显示从我想丢失的提交中删除了一个文件。
我似乎丢失了我整天处理的所有未暂存文件。我怎样才能取回这些并丢失我之前推送的无用提交?
感谢您的宝贵时间和意见。
首先,我建议您阅读 git 术语以及不同操作的实际含义:http://git-scm.com/book/en/v2。
可以在 http://www.ndpsoftware.com/git-cheatsheet.html 找到一个好的表面作弊 sheet 现在开始处理你正在处理的内容。
Remove 不会从 git 中删除任何东西,事实上,它的作用与 rm 命令在 unix 命令行中的作用完全相同。它将它们从您的文件系统中删除。如果你 rm 文件,你没有上演,他们只是简单地消失了。
很遗憾,我无法帮助您取回已删除的文件。如果可以,请查看 OS 的恢复工具,但不要屏住呼吸,除非您有某种删除缓存(windows 上的回收站)。
Revert 允许您进行反向提交,将所有内容恢复原样,就好像您从未进行过原始提交一样,但将原始内容保留在历史记录中,以便您始终可以看到发生了什么。尽管人们倾向于期望,但这并没有消除提交,而是实际上创建了一个新的提交。如果您要接触已经推送的内容,这是最佳选择。
重置会更改 git 流程中的各种状态之一,以允许您更改正在做的事情。软重置只会更改您指向的 HEAD 指针。命令 git reset --soft
会将您的 HEAD 指针更改为您提供的任何提交(默认情况下 HEAD 什么都不做)。命令 git reset
将更改您的 HEAD 和暂存区域以匹配给定的提交(默认情况下 HEAD 所以它只是取消一切)。命令 git reset --hard
将重置 HEAD、暂存区(又名索引)和工作目录以匹配给定的提交(同样,默认情况下是 HEAD,这样您就可以回到一个完全干净的环境,就好像自上次以来您没有做任何事情一样提交)。
如果你想完全删除一个commit,这叫做重置head。从技术上讲,提交本身永远不会消失,但您可以通过正常方式使其无法访问,并有效地将其从项目历史记录中删除。提醒一句:这应该永远在与下游用户的推送提交上完成。最大的问题通常是,你有多讨厌你的下游,因为对他们来说唯一安全的选择是在你这样做之后重新克隆他们自己的所有工作。
该过程将 git reset --hard HEAD
将您的整个环境恢复到上次提交时的状态。然后你想要 reset --soft HEAD^
将 HEAD(你正在处理的提交)更改为前一个。这使您处于点击提交之前的状态,所有暂存更改仍在暂存状态。此时,您可以使用 git reset --hard HEAD
放弃您的更改,您可以使用 git reset HEAD
取消暂存所有内容,最后您可以构建另一个提交并继续前进。
想要更深入地了解更改历史记录,以及为什么它被推送后基本上不允许你可以看这里:http://justinhileman.info/article/changing-history/文章末尾甚至还有一个非常好的流程图和命令参考.
我提交并推送了一些不起作用的代码,我认为这将是学习如何回滚到以前的 commit/pull 的好机会。
我对这个提交使用了reset master,这似乎有效,但后来我注意到无效的提交仍然存在,它说我落后于最新提交 1日期提交(包含无效代码的提交)。
然后我做了一些可能完全愚蠢的事情,我使用了 删除 按钮来完成我落后的提交(我不想要的早期代码)。在此之后,提交仍然存在,但现在我未提交的更改列表只显示从我想丢失的提交中删除了一个文件。
我似乎丢失了我整天处理的所有未暂存文件。我怎样才能取回这些并丢失我之前推送的无用提交?
感谢您的宝贵时间和意见。
首先,我建议您阅读 git 术语以及不同操作的实际含义:http://git-scm.com/book/en/v2。
可以在 http://www.ndpsoftware.com/git-cheatsheet.html 找到一个好的表面作弊 sheet 现在开始处理你正在处理的内容。
Remove 不会从 git 中删除任何东西,事实上,它的作用与 rm 命令在 unix 命令行中的作用完全相同。它将它们从您的文件系统中删除。如果你 rm 文件,你没有上演,他们只是简单地消失了。
很遗憾,我无法帮助您取回已删除的文件。如果可以,请查看 OS 的恢复工具,但不要屏住呼吸,除非您有某种删除缓存(windows 上的回收站)。
Revert 允许您进行反向提交,将所有内容恢复原样,就好像您从未进行过原始提交一样,但将原始内容保留在历史记录中,以便您始终可以看到发生了什么。尽管人们倾向于期望,但这并没有消除提交,而是实际上创建了一个新的提交。如果您要接触已经推送的内容,这是最佳选择。
重置会更改 git 流程中的各种状态之一,以允许您更改正在做的事情。软重置只会更改您指向的 HEAD 指针。命令 git reset --soft
会将您的 HEAD 指针更改为您提供的任何提交(默认情况下 HEAD 什么都不做)。命令 git reset
将更改您的 HEAD 和暂存区域以匹配给定的提交(默认情况下 HEAD 所以它只是取消一切)。命令 git reset --hard
将重置 HEAD、暂存区(又名索引)和工作目录以匹配给定的提交(同样,默认情况下是 HEAD,这样您就可以回到一个完全干净的环境,就好像自上次以来您没有做任何事情一样提交)。
如果你想完全删除一个commit,这叫做重置head。从技术上讲,提交本身永远不会消失,但您可以通过正常方式使其无法访问,并有效地将其从项目历史记录中删除。提醒一句:这应该永远在与下游用户的推送提交上完成。最大的问题通常是,你有多讨厌你的下游,因为对他们来说唯一安全的选择是在你这样做之后重新克隆他们自己的所有工作。
该过程将 git reset --hard HEAD
将您的整个环境恢复到上次提交时的状态。然后你想要 reset --soft HEAD^
将 HEAD(你正在处理的提交)更改为前一个。这使您处于点击提交之前的状态,所有暂存更改仍在暂存状态。此时,您可以使用 git reset --hard HEAD
放弃您的更改,您可以使用 git reset HEAD
取消暂存所有内容,最后您可以构建另一个提交并继续前进。
想要更深入地了解更改历史记录,以及为什么它被推送后基本上不允许你可以看这里:http://justinhileman.info/article/changing-history/文章末尾甚至还有一个非常好的流程图和命令参考.