如何在一个或多个文件上执行Git中的TFS'撤消待定更改'的等价物?
这基本上意味着要做这些步骤:
如果您已经(1)只是在磁盘上更改它而不添加,那么在执行此操作的命令中知道差异(如果有的话)会很好,但是当你've (2)完成了add-command 和奖励,(3)即使你提交了更改。
答案 0 :(得分:34)
对于1和2,您需要做的就是:
git stash -u #same effect as git reset --hard, but can be undone
这会抛弃任何变化。如果您使用reset
,请务必小心。通过重置和检出来了解操作索引以及硬,软和混合选项的排列。该进度书详细解释了这一点:http://progit.org/2011/07/11/reset.html
3,
git reset --hard HEAD^
但最好在此之前发出git stash -u
- 以防您有待处理的更改。
这会将当前分支重置为当前提交的父分支。在线查找“tree-ish”。引用后的^和~N将允许您指向该引用历史记录中的任何可到达点。为了理解git中如何跟踪历史,“计算机科学家的Git”很好地解释了有向无环图:http://eagain.net/articles/git-for-computer-scientists/
要从当前提交的状态获取单个文件(即丢弃更改),您可以使用结帐
git checkout HEAD -- <a list of files>
如果您错误地发出了上面的上一个重置命令,那么您没有遇到麻烦。 Git会跟踪分支在reflog中指向的位置。
git reflog
会列出历史记录。您可以在该输出中看到如何引用每个,所以:
git reset --hard HEAD@{1}
会将分支重置为之前更改为1的位置。
要添加,如果要删除忽略的文件和未跟踪的文件,可以使用此方法擦除:
git clean -xdf
答案 1 :(得分:5)
此命令将撤消本地更改并将其还原到存储库中的当前版本:
git reset --hard
您可以通过发出以下命令恢复上次有效提交:
git reset --hard HEAD
如果您只想恢复一个文件,请改用git checkout:
git checkout -- file_name.extension
git checkout HEAD file_name.extension
答案 2 :(得分:2)
git checkout [path]
或(整个回购)git reset --hard HEAD
git reset [path]
后跟git checkout [path]
git reset --hard [commit]
恢复[commit]
的仓库状态,该状态必须为tree-ish 答案 3 :(得分:0)
我在Git with Eclipse中等同于TFS undo
只需右键单击该文件并选择Replace with
- &gt; HEAD Revision
(或您喜欢的任何版本)。