如何在 Git 中对一个或多个文件执行与 TFS“撤消挂起的更改”等效的操作?
这基本上意味着执行这些步骤:
- 撤消磁盘上的更改
- 重置 Git 发现的任何更改
- 从 Git 获取文件的最新更改
如果您(1) 只是在磁盘上更改它,而不是添加它,那么了解执行此操作的命令的差异(如果有的话)会很好,而且当您已经(2) 完成了添加命令,为了获得奖励,(3) 即使您已提交更改。
最佳答案
对于1和2,你需要做的就是:
git stash -u #same effect as git reset --hard, but can be undone
这将丢弃任何更改。使用 reset
时要小心。阅读有关使用重置和 checkout 操作索引以及硬、软和混合选项的排列的信息。 Progit 书详细解释了这一点: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/
要从当前提交的状态中获取单个文件(即丢弃更改),您可以使用 checkout
git checkout HEAD -- <a list of files>
如果您错误地发出了上面的最后一个重置命令,您没有遇到麻烦。 Git 会跟踪分支过去在 reflog 中指向的位置。
git reflog
将为您列出历史记录。您可以在该输出中看到如何引用每个,因此:
git reset --hard HEAD@{1}
将分支重置为之前 1 个更改的位置。
补充一下,如果你想删除被忽略的文件和未跟踪的文件,你可以用这个删除:
git clean -xdf
关于git - 如何执行 'Undo pending changes' 的 TFS 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7999259/