git撤銷提交(commit)

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

1、簡介

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

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

一、修改本地倉庫中commit對象(快照)日誌

以下圖:對象

此時本地倉庫對應的是commit4,git reset 可讓本地倉庫對應的指針變爲commit3或是commit1等以前的版本,固然,也能夠變爲commit4以後的某個commit,如commit5。
Git 的分支,其實本質上僅僅是指向提交對象的可變指針。
備註:當使用git reset命令時候,通常會修改本地倉庫。blog

其經常使用格式以下:it

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

2、參數

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

  • --hard commitId 修改本地倉庫、暫存區、工做區裏面的數據爲commitId對應快照的內數據d3

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


    這種狀況是工做區沒有,但暫存區有,因此提示修改未在暫存區(D表示delete)db

  • --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只對已被追蹤的文件起做用,

相關文章
相關標籤/搜索