git/egit | reset 和 revert 的区别 -凯发k8网页登录

git/egit | reset 和 revert 的区别

git的世界里有后悔药吗?

有的。不仅有,还不止一种:reset 和 revert。它们有什么区别呢?先说结论吧。

resetrevert
作用 将某个commit之后的push全部回滚 将某个指定的commit回滚
历史记录(轨迹)
是否可作用于单个文件 否(都是作用于commit,与文件无关)

下面来说说具体例子。

试验步骤如下:

  1. 新建两个空白文件 revert.txt 和 common.txt,然后commit&push。
  2. 修改 revert.txt 文件,内容为“commit 1”,然后commit&push,提交的备注为“commit 1 of revert”
  3. 修改 common.txt 文件,内容为“update for revert(by commit 2)”
  4. 修改 revert.txt 文件,新增一行,内容为“commit 2”
  5. 3 和 4的修改一起commit&push,提交备注为“commit 2 of revert(revert.txt common.txt)”

效果如下:

git-revert-01

图1-revert之前

目的

保留3的修改,回滚4的修改。

操作

选中“ revert.txt ”文件,然后在 history 里选中 “commit 2 of revert…”,右键,找到“revert commit”菜单,如图:

git-revert-02

图2-revert操作

点击后,效果如图:

git-revert-03

图3-revert之后

最后,push即可。

结果

未能达到预期效果,revert.txt 和 common.txt的修改都被撤销了。revert的作用范围是一个commit(原子),跟文件的个数无关。

注:对最后一个commit做revert比较简单,两步:一,revert;二,push就可以了。对于较早的commit,因为中间间隔了其他的commit,文件会有冲突,需要处理完冲突才可以commit&push。

试验步骤如下:

  1. 新建空白文件 reset.txt,然后commit&push。
  2. 修改 reset.txt 文件,内容为“commit 1”
  3. 修改 common.txt 文件,内容为“update for reset(commit 1)”
  4. 2和3的修改一起commit&push,提交的备注为“commit 1 of reset”
  5. 修改 reset.txt 文件,新增一行,内容为“commit 2”,然后commit&push,提交的备注为“commit 2 of reset”
  6. 修改 reset.txt 文件,内容为“commit 3”
  7. 修改 common.txt 文件,内容为“update for reset(commit 3)”
  8. 6和7的修改一起commit&push,提交的备注为“commit 3 of reset”

效果如下:

git-reset-04

图4-reset之前

目的

将commit 1 之后的(即commit 2 和 3)改动全部回滚。

操作

在 history 里找到“commit 1”,选中后,右键,找到 reset 菜单,选择 hard 模式。

git-reset-05

图5-reset

执行后,如下图所示,head 已经指向里 commit 1,common.txt 和 reset.txt 的内容也已改变。注意左侧的项目栏,它已落后了服务器(github)2个commit。怎么提交到服务器上呢?直接push,它会提示不是最新的,操作失败。这里要用到 push 的 force 属性。

git-reset-06

图6-reset之后

选中 项目,右键 – team – remote – configure push to upstream,在打开的小窗口中找到 advanced,如下图所示,这里的 force update 要勾上,表示强制覆盖。

重新push,就可以跟服务器保持同步了。

git-reset-07

图7-push-force

要特别注意的是,reset慎用,跟linux的“rm -rf /”有异曲同工之妙。

posted on 2021-08-17 10:37 paulwong 阅读(210) 评论(0)     所属分类: git

网站地图