無廢話Git——本地伺服器提交撤銷
上一篇有提到, add 到暫存區的改動可以撤銷,同樣已經Commit的改動同樣有可能有要撤銷回退的狀況。
暫存區回退
命令列:
git reset HEAD – filename
Git GUI 介面操作
1. 選中需要unstage的檔案
2. 選單 Commit–>Unstage From Commit
以上一篇的project 1的 file1.txt檔案為例,
1. 改動檔案: 新增一行:second Line
2. 新增到暫存區
3. 回退: git reset HEAD – file1.txt
從暫存區撤回,之前檔案做過的修改還會保持。
Git reset
以上只是Git 撤銷的一種用法, Git Rest有三種模式:
mixed - 預設
soft
hard
mixed 模式, 預設模式
git reset 如果不加其他引數或是加上 mixed使用的都是這種模式。
- 準備工作
將project1的file1檔案提交三次, 使用:
git log –graph –one
命令檢視一下提交記錄 (單行,圖形化顯示)
D:\gitworkspace\project1>git log –graph –oneline
* c51c220 third commit
* 7e6fea3 second commit
* 6661de3 file1 add
修改檔案,新增一行: four Line
並add 到暫存區。現在要回退到第二次提交
git reset –mixed 7e6fea3
這裡的版本號也可以使用 HEAD^替代。(不過筆者的使用好像是有點問題)
HEAD指向當前版, HEAD^ 上一版, HEAD^^上上一版…
使用git show HEAD , HEAD已經指向第二次提交了。執行完成之後,變化如下:
- 暫存區的內容撤銷了
- 工作區的檔案沒有變化, 也就是新增的那一行還在
- 使用git log 檢視, 只有兩條提交的記錄了。
- 使用git diff 比較差異,版本庫是使用第二版和本地檔案進行比較。
刪除第三行後, add後提交。再看一下log
D:\gitworkspace\project1>git log –graph –oneline
* db34463 four commit
* 7e6fea3 second commit
* 6661de3 file1 add
第三次的提交就從版本庫中去掉了。
soft 模式
準備工作
在file1.txt 新增一行: five linegit add 到暫存區
- 執行: git reset –soft 7e6fea3
也就是回退一個版本。 執行完成之後:
- 暫存區的內容還在(不同與mixed 模式)
- 使用git diff –cached 比較一下暫存區與版本庫的差別。
版本庫使用的是回退的版本(與mixed相同)
D:\gitworkspace\project1>git diff –cached
diff –git a/file1.txt b/file1.txt
index 68d1742..80554e6 100644
— a/file1.txt
+++ b/file1.txt
@@ -1,2 +1,4 @@
first Line
-second Line
\ No newline at end of file
+second Line
+four line
+five line
\ No newline at end of file
提交更改
git commit -m “five commit”
6.看一下記錄, 庫中上一版的記錄沒有了。
git log –graph –oneline
hard 模式
準備工作
修改file1.txt , 新增 six Line, 並add到暫存區回退上一版,執行
git reset –hard 706fea3執行效果
- 快取區內容沒有了(與mixed同)
- 工作區的內容也被回退的版本替換了。
也就是說, 使用庫的指定版本完全替換。
總結
git reset –soft : 不改變暫存區, 僅僅將Commit回退
git reset –mixed : 不改變工作區,覆蓋暫存區
git reset –hard : 改變工作區,覆蓋暫存區
相關文章
- 無廢話Git——概念與本地伺服器提交Git伺服器
- Git中撤銷提交Git
- git各種撤銷提交Git
- Git 實用操作:撤銷 Commit 提交GitMIT
- git撤銷已經提交到遠端伺服器的commitGit伺服器MIT
- git撤銷某一次commit提交GitMIT
- 網頁撤銷後ubuntu本地撤銷網頁Ubuntu
- git撤銷命令Git
- git進階(撤銷pull、撤銷merge、撤銷add)Git
- Git 優雅的撤銷中間某次提交(包括 merge)Git
- 如何撤銷 Git 操作?Git
- Git命令(撤銷更改)Git
- 撤銷git addGit
- git撤銷修改操作Git
- git如何撤銷已經提交到遠端的commit資訊GitMIT
- 撤銷 git commit --amendGitMIT
- 撤銷rebase與git原理Git
- git 撤銷相關操作Git
- 撤銷 git commit –amendGitMIT
- Git各種撤銷操作Git
- Git 系列教程(7)- 撤銷操作Git
- git 乾貨系列:(三)我提交錯了我想撤銷或者回退版本Git
- git 入門教程之撤銷更改Git
- Git 撤銷修改和版本回退Git
- 從撤銷 rebase 談談 git 原理Git
- git 中撤銷已commit 的GitMIT
- 使用 Git 撤銷 Commit,但未 Git Push 的命令GitMIT
- git add 新增錯檔案 撤銷Git
- 撤銷操作 —— Git 學習筆記 12Git筆記
- 無廢話專案經理
- 【吐血整理】Git的各種撤銷姿勢Git
- Git commit 之後,想撤銷 commitGitMIT
- Git study Day01 暫存區, 撤銷Git
- 如何在 Git 裡撤銷(幾乎)任何操作Git
- 『現學現忘』Git基礎 — 23、Git中的撤銷操作Git
- Git如何撤銷某次分支的合併MergeGit
- 提交原本地專案到遠端gitGit
- 《無廢話XML》的一點筆記XML筆記