济南高新区建设局网站,网站备案进度查询,织梦网站图片怎么修改,网站分几种类型在使用 git 进行项目开发的过程中#xff0c;有时会出现错误提交的情况#xff0c;这时就需要能够撤销错误的提交#xff0c;将代码恢复到提交之前的样子。根据不同情况#xff0c;可以使用 git reset 或 git revert 命令。
一. git reset
git reset 的原理是修改 HEAD 的…在使用 git 进行项目开发的过程中有时会出现错误提交的情况这时就需要能够撤销错误的提交将代码恢复到提交之前的样子。根据不同情况可以使用 git reset 或 git revert 命令。
一. git reset
git reset 的原理是修改 HEAD 的位置即将 HEAD 指向的位置改变为之前存在的某个版本。具体来说git reset 的作用是将当前分支的 HEAD 指针指向指定的提交同时将暂存区和工作区更新为该提交的状态。
git reset 命令有三个主要选项 --soft将 HEAD 指针指向给定的提交暂存区和本地源码不变也就是说未保存的修改会保留下来。在三个选项中对现有版本库状态改动最小。简单来说–soft 不会删除回退的代码而是会将代码从 commit 回退到 add 之后的状态暂存区。如果回退之前的暂存区有提交会和回退的版本合并工作区代码不变。 --mixed将 HEAD 指针指向给定的提交暂存区也会相应的回退本地源码不变。简单来说–mixed 不会删除回退的代码而是会将代码从 commit 回退到 add 之前的状态工作区。如果回退之前的暂存区有提交也会跟着回退到工作区并与工作区的代码合并。 --hard将 HEAD 指针指向给定的提交暂存区和本地源码也全部回退到指定的状态所有的修改都会丢失是最危险的一个参数。简单来说使用 --hard 之后会将代码回退到指定版本同时清除工作区和暂存区的修改所有未 commit 的代码都会被删除。
如果需要回退的修改还没有 git push 到远程仓库那只需要在 git reset 之后继续开发正常提交就行。如果回退的版本已经 push 到远程仓库回退之后需要git push -f强制提交一次使远程仓库也回退到指定版本。但是在实际多人协同开发的过程中慎重使用使用 git rest 回退到某个版本可能会覆盖掉别人提交的代码。
git reset commit-id
git reset 命令默认使用 --mixed 参数。除了 commit-id 之外还可以使用git reset HEAD~简写形式回退到上一个版本。
git reset 使用 commit-id 不仅可以回退到某个版本还可以用来恢复到回退之前的版本。如果不记得 commit-id可以通过git reflog查询。
二. git revert
git revert 的原理是创建一个新的提交该提交是上一个提交的反向操作以撤销该提交的更改。与 git reset 不同git revert 不会改变提交历史而是通过创建一个新的提交来撤销之前的更改也不会改变暂存区和工作区的内容。
git revert commit-id
在执行 git revert 的过程中可能会出现版本冲突。对于每个冲突的文件需要手动打开并编辑它们。Git会在冲突的文件中插入特殊的标记指示冲突的位置。你需要删除这些标记并决定如何解决冲突。解决冲突之后需要提交冲突的文件 git add file并且执行 git revert --continue 继续撤销流程。如果决定放弃撤销提交可以执行 git revert --abort这将撤销 git revert 命令的执行并返回到之前的状态。
三. git reset 和 git revert 的对比 假设我们提交了三次修改修改一、修改二、修改三现在发现修改二有 bug 需要回退有两种方案。
方法一git reset
由于 git reset 的原理是将 HEAD 指针指向之前的某次提交想要将版本回退到修改一需要使用 git reset commit-id1。reset 之后通过 git log 可以看到目标版本之后的提交全都没有了。 适用场景如果想恢复到之前的某次提交的版本且那个版本之后的提交都不要了可以使用 git reset 命令。
方法二git revert
由于 git revert 的原理是创建指定版本的反向操作所以可以使用 git revert commit-id2 创建一个新的修改四。修改四撤销了修改二的操作并将 HEAD 指针移动到了修改四。这个命令不会丢失任何更改是一个安全的操作。 适用场景如果想撤销之前的某一版本但是又想保留该目标版本后面的版本记录下这整个版本变动流程就可以用 git revert 命令。