我知道,我知道,git revert
但我刚刚了解到它的行为并不完全相同svn revert
——至少在 Visual Studio 2015 中不是,或者可能在 TortoiseGit 中不是。我来解释一下:
我是 VS2015 的新手,也是 Git 的新手。当我发现 VS2015 开箱即用地集成了 Git 时,我尝试了一下。但是,我正在处理几个文件,准备只提交其中一个。不幸的是,我在 Team Explorer 窗格中应用的过滤器不适用于已提交的文件(我猜这就是按钮标题为“全部提交”的原因)。相反,它提交了所有“脏”文件——哎呀!
使用 TortoiseGit 查看我的仓库日志,我选择了最近的(本地)提交,并通过“恢复此提交的更改”将其恢复。我原本以为这个操作会将我正在处理的文件恢复到提交之前的“脏”状态,就像 SVN Revert 所做的那样,但令我惊讶的是,该操作将我的本地文件恢复到之前的回购版本,而不是在我提交它们之前的状态。
当然,我能够恢复我的工作,因为它全部都在我最初提交的“所有文件”修订版中。我刚刚开始将每个文件复制到其正确的目录中。但我在这里遗漏了什么?是否有我应该使用的 Git 功能而不是 Revert?
答案1
在 Git 中,您可以删除整个提交。最好只对未推送的提交执行此操作。Git 的整个“分布式”部分使这成为可能。使用 SVN,您的更改可立即供其他人使用。使用 Git,它们仅在推送后才可用(Visual Studio 中的“同步”)。
因此,不要撤销提交(这意味着错误的更改将保留在存储库中并可能产生意外的副作用),而是执行git reset --mixed HEAD~1
。这意味着您的工作目录将保持原样,但最后一次提交将被删除。这意味着 Git 将再次显示所有文件为已修改。
在 Git 中恢复会创建您恢复的提交的“反向”提交,从而撤消所有更改。
然后,要仅提交单个文件,请先检查git status
Git 中是否有不需要的更改暂存。然后,使用git add path/to/file.txt
暂存(仅)该文件。之后,只需执行git commit
,使用适当的提交消息,您就大功告成了。
当你运行git commit
并弹出文本编辑器时,该文件还包含将提交的更改列表。仔细检查此列表,确保只提交你想要提交的内容。
另外,不要使用 Visual Studio 积极使用 Git。它试图将旧的 TFS 术语应用于 Git 操作,但它们并不相同。相反,尝试在控制台上学习 Git。Visual Studio 有一些不错的只读工作功能,例如出色的差异视图。