git撤銷提交(commit)


我們知道Git有三大區(工作區、暫存區、版本庫)以及幾個狀態(untracked、unstaged、uncommited)

一、簡介

Git 保存的不是文件的變化或者差異,而是一系列不同時刻的文件快照。

git reset命令是git中重置命令,即用來撤銷某次提交(commit)。首先,我們得了解,git reset可以幫我們重置哪些內容:

1、修改本地倉庫中commit對象(快照)

如下圖:

此時本地倉庫對應的是commit4,git reset 可以讓本地倉庫對應的指針變為commit3或是commit1等之前的版本,當然,也可以變為commit4之后的某個commit,如commit5。
Git 的分支,其實本質上僅僅是指向提交對象的可變指針。
備注:當使用git reset命令時候,一般會修改本地倉庫。

其常用格式如下:

  • 用法一:git reset [-q] [ ] [--]  ...
  • 用法二:git reset [--soft | --mixed | --hard | --merge | --keep ] [-q] [commit]

二、參數

參數說明 (git log和git reflog可查看commitId,commitId是快照的唯一標識)

  • --hard commitId 修改本地倉庫、暫存區、工作區里面的數據為commitId對應快照的內數據

  • --mixed commitId 修改本地倉庫、暫存區里面的數據為commitId對應快照里的數據,是git reset默認的參數,--mixed可缺省。 暫存區的數據會被快照中的數據覆蓋


這種情況是工作區沒有,但暫存區有,所以提示修改未在暫存區(D表示delete)

  • --soft commitId 修改本地倉庫里面的數據為commitId對應快照的數據。(僅改變指向快照的指針指向)

當git reset 后面的commitId為當前提交的commitId時,即HEAD(可缺省)。那么:

參數說明

  • --hard HEAD 修改暫存區、工作區里面的內容為當前快照里的內容。(這個很危險,曾經踩過坑,電腦的文件丟失了很多,也是導致我決心好好學一學git的原因,慎用)
  • --mixed HEAD 修改暫存區里面的內容為當前快照里的內容,是git reset默認的參數,因此可缺省。
  • --soft HEAD 本地倉庫、暫存區、工作區都不改變 |

我們需要注意,使用git reset重置一般是很危險的,會徹底地丟掉歷史。因為如果沒有記錄下重置前的commitId,一般不容易找回,除非分析.git/logs里面的日志,故重置需慎重。

git diff只對已被追蹤的文件起作用,即已git add過,在暫存區有的

git commit -a -m只對已被追蹤的文件起作用,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM