自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:說(shuō)說(shuō)你對(duì)Git Reset 和 Git Revert 的理解?區(qū)別?

開(kāi)源
在當(dāng)前提交后面,新增一次提交,抵消掉上一次提交導(dǎo)致的所有變化,不會(huì)改變過(guò)去的歷史,主要是用于安全地取消過(guò)去發(fā)布的提交.

[[418395]]

本文轉(zhuǎn)載自微信公眾號(hào)「JS每日一題」,作者灰灰 。轉(zhuǎn)載本文請(qǐng)聯(lián)系JS每日一題公眾號(hào)。

 一、是什么

git reset

reset用于回退版本,可以遺棄不再使用的提交

執(zhí)行遺棄時(shí),需要根據(jù)影響的范圍而指定不同的參數(shù),可以指定是否復(fù)原索引或工作樹(shù)內(nèi)容

git revert

在當(dāng)前提交后面,新增一次提交,抵消掉上一次提交導(dǎo)致的所有變化,不會(huì)改變過(guò)去的歷史,主要是用于安全地取消過(guò)去發(fā)布的提交

二、如何用

git reset

當(dāng)沒(méi)有指定ID的時(shí)候,默認(rèn)使用HEAD,如果指定ID,那么就是基于指向ID去變動(dòng)暫存區(qū)或工作區(qū)的內(nèi)容

  1. // 沒(méi)有指定ID, 暫存區(qū)的內(nèi)容會(huì)被當(dāng)前ID版本號(hào)的內(nèi)容覆蓋,工作區(qū)不變 
  2. git reset 
  3.  
  4. // 指定ID,暫存區(qū)的內(nèi)容會(huì)被指定ID版本號(hào)的內(nèi)容覆蓋,工作區(qū)不變 
  5. git reset <ID> 

日志ID可以通過(guò)查詢,可以git log進(jìn)行查詢,如下:

  1. commit a7700083ace1204ccdff9f71631fb34c9913f7c5 (HEAD -> master) 
  2. Author: linguanghui <linguanghui@baidu.com> 
  3. Date:   Tue Aug 17 22:34:40 2021 +0800 
  4.  
  5.     second commit 
  6.  
  7. commit e31118663ce66717edd8a179688a7f3dde5a9393 
  8. Author: linguanghui <linguanghui@baidu.com> 
  9. Date:   Tue Aug 17 22:20:01 2021 +0800 
  10.  
  11.     first commit 

常見(jiàn)命令如下:

  • --mixed(默認(rèn)):默認(rèn)的時(shí)候,只有暫存區(qū)變化
  • --hard參數(shù):如果使用 --hard 參數(shù),那么工作區(qū)也會(huì)變化
  • --soft:如果使用 --soft 參數(shù),那么暫存區(qū)和工作區(qū)都不會(huì)變化

git revert

跟git reset用法基本一致,git revert 撤銷某次操作,此次操作之前和之后的 commit和history都會(huì)保留,并且把這次撤銷,作為一次最新的提交,如下:

 

  1. git revert <commit_id> 

如果撤銷前一個(gè)版本,可以通過(guò)如下命令:

  1. git revert HEAD 

撤銷前前一次,如下:

  1. git revert HEAD^ 

三、區(qū)別

撤銷(revert)被設(shè)計(jì)為撤銷公開(kāi)的提交(比如已經(jīng)push)的安全方式,git reset被設(shè)計(jì)為重設(shè)本地更改

因?yàn)閮蓚€(gè)命令的目的不同,它們的實(shí)現(xiàn)也不一樣:重設(shè)完全地移除了一堆更改,而撤銷保留了原來(lái)的更改,用一個(gè)新的提交來(lái)實(shí)現(xiàn)撤銷

兩者主要區(qū)別如下:

  • git revert是用一次新的commit來(lái)回滾之前的commit,git reset是直接刪除指定的commit
  • git reset 是把HEAD向后移動(dòng)了一下,而git revert是HEAD繼續(xù)前進(jìn),只是新的commit的內(nèi)容和要revert的內(nèi)容正好相反,能夠抵消要被revert的內(nèi)容
  • 在回滾這一操作上看,效果差不多。但是在日后繼續(xù) merge 以前的老版本時(shí)有區(qū)別

git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch時(shí),之前提交合并的代碼仍然存在,導(dǎo)致不能夠重新合并

但是git reset是之間把某些commit在某個(gè)branch上刪除,因而和老的branch再次merge時(shí),這些被回滾的commit應(yīng)該還會(huì)被引入

如果回退分支的代碼以后還需要的情況則使用git revert, 如果分支是提錯(cuò)了沒(méi)用的并且不想讓別人發(fā)現(xiàn)這些錯(cuò)誤代碼,則使用git reset

參考文獻(xiàn)

https://juejin.cn/post/6844903542931587086

https://marklodato.github.io/visual-git-guide/index-zh-cn.html#reset

 

責(zé)任編輯:武曉燕 來(lái)源: JS每日一題
相關(guān)推薦

2021-08-17 07:15:16

Git RebaseGit Merge面試

2021-08-09 07:47:40

Git面試版本

2022-02-10 09:56:33

git revertgit resetGit

2015-08-20 10:42:17

2021-08-16 08:33:26

git

2020-10-27 07:31:35

GitGit RevertGit Reset

2021-11-25 10:18:42

RESTfulJava互聯(lián)網(wǎng)

2020-12-01 08:47:36

Java異常開(kāi)發(fā)

2020-06-12 15:50:56

options前端服務(wù)器

2021-08-12 07:49:25

Git 索引HEAD

2021-08-11 08:53:23

Git命令面試

2021-09-16 07:52:18

算法應(yīng)用場(chǎng)景

2021-10-15 09:53:12

工具

2021-11-08 11:32:01

觀察

2021-09-07 08:33:27

JavaScript TypeScript 函數(shù)

2019-05-10 10:50:04

Spring AOPJDK動(dòng)態(tài)代理CGLIB動(dòng)態(tài)代理

2021-11-03 14:10:28

工廠模式場(chǎng)景

2021-11-02 22:04:58

模式

2022-02-21 17:24:18

序列化對(duì)象存儲(chǔ)

2021-11-10 07:47:49

組合模式場(chǎng)景
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)