网站素材网,龙岩兼职招聘最新发布,网站流量被黑,哪个合肥seo好博客原文地址: http://blog.mexiqq.com/index.php/archives/3/题记#xff1a;团队中大多数成员使用 sourceTree 和 github 两款 git 工具#xff0c;然而大家对于图形化工具提供的 reset,checkout,revert 功能点并不是很了解#xff0c;甚至于混淆,然后凭借猜测去使用。功夫… 博客原文地址: http://blog.mexiqq.com/index.php/archives/3/ 题记团队中大多数成员使用 sourceTree 和 github 两款 git 工具然而大家对于图形化工具提供的 reset,checkout,revert 功能点并不是很了解甚至于混淆,然后凭借猜测去使用。功夫不负有心人在尝试过多次冲突处理或分支开发的坑后终于形成了自己的一套使用方式可喜可贺。然而问题的解决方案的并不是效率最高的内部的执行过程我们也不清楚这对于一个自律的程序艺术家是无法接受的。基于这个问题翻译这篇博客为 git 中高级用户的 undo 操作提供参考。鼓励在熟悉命令行操作再通过图形化工具提高开发效率。水平有限释疑为主翻译为辅 Reset Checkout and Revert 原文地址https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting git reset, git checkout, git revert 命令是最有用的三条 git 命令。他们可以帮助你撤销 repo 的一些操作并且前两条命令既可以用于 commit 级别也可以用于 file 级别。 因为他们很相似所以很容易混淆。这片文章我们将比较他们的相同和不同之处。 阅读本文前需要了解 git repo 的三大 components分别是 working directory(代码仓库) staged snapshot(快照:add的缓存库) commit history(commit历史) 这将更好的帮助你理解这三条命令。 commit 级别的操作 传递给 git reset 和 git checkout的参数会决定命令的作用范围。当命令并不包括含一个文件路径时命令作用于整个 commit。 Reset: 在 commit 级别上git reset 命令移动 HEAD 到当前分支的一个 commit 这可以用来撤销当前分支的一些 commit 。 例如下面的命令会让 hotfix 分支回退两个 commits git checkout hotfix git reset HEAD~2 先前在 HEAD 之前的两次 commit 现在处在 HEAD 之后这意味着他们在下一次 git 提交时被作为垃圾删掉换句话说这两次提交会被抛弃。如下图所示 git reset用于撤销未被提交到远端的改动。除了可以移动当前分支的HEAD你可以通过不同的标记选择修改 staged snapshot 或者 working directory --soft staged snapshot 和 working directory 都未被改变 (建议在命令行执行后再输入 git status 查看状态)--mixed staged snapshot 被更新 working directory 未被更改。【这是默认选项】建议同上)--hard staged snapshot 和 working directory 都将回退。--hard 很危险它会直接回退你之前所有的修改使用前可以事先保存 commit id. 【这些标记经常和HEAD一起使用。例如git reset --mixed HEAD可撤销所有缓存改动但是保留他们在工作目录下。git reset --hard HEAD可彻底删除没有提交的改动。】 checkout 到现在为止你应该已经熟悉 commit 级别的 git checkout 了。当你传送一个 branch name 名字时,你将更换当前的分支. git checkout hotfix 上面的命令会切换 HEAD 到不同的分支并且更新当前的 working directory 去匹配。因为会覆盖当前的本地更改所以更换分支前git强制你彻底放弃或者提交存储当前的更改。不同于 git reset, git checkout 不会废弃任何分支或提交。 你也可以 checkout 到任何一次 commit通过提供 commit Id 作为参数. 比如下面的命令。 git checkout HEAD~2/[commit id] 这对于 review repo 的某个 version 的代码很有用。然而如果再次添加新的提交就无法返回原先的状态。因此你应该在修改前总是创建一个新的分支。 Revert git revert 命令通过创建一次新的 commit 来撤销一次 commit 所做出的修改。这种撤销的方式是安全的因为它并不修改 commitm history, 比如下边的命令将会查出倒数第二次即当前commit的往前一次提交的修改并创建一个新的提交用于撤销当前提交的上一次 commit。 git checkout hotfix git revert HEAD~2 如下图所示 File 级别的操作 git reset 和 git checkout 命令同样可以接受一个可选的文件路径作为参数,这样可以将操作限制在一个单独的文件中。 Reset: 当调用一个文件路径时git reset 命令会更新 staged snapshot 去匹配某次 commit。 下面的命令将会使文件回退一个 commit。 git reset HEAD~1 文件不建议使用 【--soft、--mixed、--hard标记此时不起作用会更新staged snapshot但不更新working directory】 Checkout git checkout 命令 和 git reset 类似除了它会更新 working directory, 而不是 staged snapshot 如下命令将会更新 working directory 去匹配某次 commit git checkout HEAD~1 [文件] Summary: commandsscopecommon user casesgit resetCommitDiscard commits in a private branch or throw away uncommited changesgit resetFileUnstage a filegit checkotCommitswitch between branches or inspect old snapshotgit checkoutFileDiscard changes in the working directorygit revertcommitUndo commits in a public branchgit revertFile不支持