git - 如何执行 'Undo pending changes' 的 TFS 等价物

标签 git version-control undo

如何在 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/

相关文章:

.net - 在 WPF 绑定(bind)中撤消

excel - 如何在excel vba中允许多个连续撤消?

cocoa - 捕获 NSTableView 上的撤消/重做按键事件

git - 如何删除分支并回滚到工作主分支

git - git 中的 vimdiff 和 vimdiff2 有什么区别?

version-control - Mercurial:在一个存储库中的分支之间 merge 一个文件

svn - 有没有人在 VB6 应用程序和源代码管理方面取得过任何成功?

git - 是什么导致了在 rebase 期间必须多次解决完全相同的冲突的情况?

git - 如何使用 CURL 上传 github Assets 文件

git - 你能用 git svn 指定哪个 svn 分支吗?