git學習 版本回退

2021-09-24 04:12:22 字數 3372 閱讀 9039

像這樣,你不斷對檔案進行修改,然後不斷提交修改到版本庫里,就好比玩rpg遊戲時,每通過一關就會自動把遊戲狀態存檔,如果某一關沒過去,你還可以選擇讀取前一關的狀態。有些時候,在打boss之前,你會手動存檔,以便萬一打boss失敗了,可以從最近的地方重新開始。git也是一樣,每當你覺得檔案修改到一定程度的時候,就可以「儲存乙個快照」,這個快照在git中被稱為commit。一旦你把檔案改亂了,或者誤刪了檔案,還可以從最近的乙個commit恢復,然後繼續工作,而不是把幾個月的工作成果全部丟失。

現在,我們回顧一下readme.txt檔案一共有幾個版本被提交到git倉庫裡了:

版本1:wrote a readme file

git is a version control system.

git is free software.

版本2:add distributed

git is a distributed version control system.

git is free software.

git is a distributed version control system.

git is free software distributed under the gpl.

當然了,在實際工作中,我們腦子裡怎麼可能記得乙個幾千行的檔案每次都改了什麼內容,不然要版本控制系統幹什麼。版本控制系統肯定有某個命令可以告訴我們歷史記錄,在git中,我們用git log命令檢視:

$ git log

commit 1094adb7b9b3807259d8cb349e7df1d4d6477073 (head -> master)

author: michael liao date: fri may 18 21:06:15 2018 +0800

commit e475afc93c209a690c39c13a46716e8fa000c366

author: michael liao date: fri may 18 21:03:36 2018 +0800

add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0

author: michael liao date: fri may 18 20:59:18 2018 +0800

wrote a readme file

如果嫌輸出資訊太多,看得眼花繚亂的,可以試試加上--pretty=oneline引數:

$ git log --pretty=oneline

e475afc93c209a690c39c13a46716e8fa000c366 add distributed

eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

好了,現在我們啟動時光穿梭機,準備把readme.txt回退到上乙個版本,也就是add distributed的那個版本,怎麼做呢?

首先,git必須知道當前版本是哪個版本,在git中,用head表示當前版本,也就是最新的提交1094adb...(注意我的提交id和你的肯定不一樣),上乙個版本就是head^,上上乙個版本就是head^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成head~100

$ git reset --hard head^

head is now at e475afc add distributed

--hard引數有啥意義?這個後面再講,現在你先放心使用。

看看readme.txt的內容是不是版本add distributed

$ cat readme.txt

git is a distributed version control system.

git is free software.

然被還原了。

$ git log

commit e475afc93c209a690c39c13a46716e8fa000c366 (head -> master)

author: michael liao date: fri may 18 21:03:36 2018 +0800

add distributed

commit eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0

author: michael liao date: fri may 18 20:59:18 2018 +0800

wrote a readme file

$ git reset --hard 1094a
版本號沒必要寫全,前幾位就可以了,git會自動去找。當然也不能只寫前一兩位,因為git可能會找到多個版本號,就無法確定是哪乙個了。

再小心翼翼地看看readme.txt的內容:

$ cat readme.txt

git is a distributed version control system.

git is free software distributed under the gpl.

果然,我胡漢三又回來了。

然後順便把工作區的檔案更新了。所以你讓head指向哪個版本號,你就把當前版本定位在哪。

現在,你回退到了某個版本,關掉了電腦,第二天早上就後悔了,想恢復到新版本怎麼辦?找不到新版本的commit id怎麼辦?

$ git reflog

e475afc head@: reset: moving to head^

e475afc head@: commit: add distributed

eaadf4e head@: commit (initial): wrote a readme file

Git學習 版本回退

我們可能對某乙個檔案提交過很多版本,我們想檢視所有的歷史版本,可以通過如下 進行檢視。執行後,我們能夠看到所有的檔案所有提交過的歷史版本。所有版本按照時間倒序列出,從輸出結果能夠看到。該倉庫中提交過兩個版本,其中版本1寫了乙個readme的檔案,版本2在文末新增了gpl。我們還可以通過引數將輸出結果...

Git版本回退

1 檢視檔案修改歷史 git log 返回的是commit後的操作記錄 git log pretty oneline 也可以使用這個命令格式化日誌輸出 2 版本回退 git reset hard head 回退到上乙個版本 git reset hard head 100 會退到第100個版本,例如現...

git版本回退

先說今天遇到的問題,看到乙個config.php的配置檔案一直在修改的狀態下,但是和遠端的config.php是不一致的,我不需要提交它,但是看它在 modified的狀態下,很不爽,想刪除它,git rm config.php,然後git push了下,結果不僅把本地的config.php乾掉了,...