git reset --hard, git revert, git stash ,git restore的区别

张映 发表于 2019-11-11

分类目录: linux

标签:, , , ,

git  reset --hard,版本回去某到某一版本,对本机的版本产生影响,不对远程分支产生影响。

git revert,撤销某一个,或者连续的多个版本,会对远程分支产生影响。这根git reset反思想的。

git stash,保存当前状态,可以理解成存档,用在切换分支时,又不想commit当前分支时使用。

git restore,单纯的撤销

假如有以下版本:

1->2->3->4->5->6(当前版本)

1,git reset回滚版本4

1->2->3->4->5->6(当前版本)

reset回滚版本4,最新版本还是6,所以本地分支是落后于远程分支

zhangying test$ git reset --hard b02ada3d80830f8e9eca90fea259f92dca271424
HEAD 现在位于 b02ada3 a
zhangying test$ git pull
更新 b02ada3..8b6559e
Fast-forward
 .gitignore         |  1 +
 abc => 2019/09/123 |  0
 2019/09/hao        |  0
 2019/09/mytest123  |  0
 2019/09/test       |  0
 test.conf          | 46 ----------------------------------------------
 6 files changed, 1 insertion(+), 46 deletions(-)
 rename abc => 2019/09/123 (100%)
 create mode 100644 2019/09/hao
 create mode 100644 2019/09/mytest123
 create mode 100644 2019/09/test
 delete mode 100644 test.conf

2,git revert撤销到版本4

1->2->3->4->5->6->4(当前版本)

git revert撤销到版本4,也就是说把5,6二个版本撤销掉,4就为最新版本了。

zhangying test$ git revert -n 3ae3fdcf030984292fac472984b877820357bd92^..98bdec8b3ba038b94ce869cdc1c5cc8fff8cf2ae
删除 hao.txt
删除 2
删除 1
zhangying test$ git commit -m 'revert'
[master 807c99f] revert
 4 files changed, 89 deletions(-)
 delete mode 100644 1
 delete mode 100644 2
 delete mode 100644 hao.txt
 delete mode 100644 index.php
zhangying test$ git push

-n是将多次撤销,合并成一次commit。如果不加-n,多次都会多次commit

3,git stash保存当前修改,可以理解成存档

zhangying test$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git restore <文件>..." 丢弃工作区的改动)
	修改:     ccc

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
	hao

zhangying test$ git stash
保存工作目录和索引状态 WIP on master: 8b6559e Revert "Revert "aa""

zhangying test$ git stash list  //
stash@{0}: WIP on master: 8b6559e Revert "Revert "aa""
stash@{1}: WIP on a2: 3095ddd test

zhangying test$ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。

未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)
	hao    //未加入版本库的文件无效

4,git restore,单纯的撤销文件,"git restore <文件>..." 丢弃工作区的改动,不举例了。对未加入版本库的文件无效



转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/linux/2230.html