你無法修改 Git 的歷史記錄

2022-01-22 23:22:22 字數 1297 閱讀 5191

**:

有時候使用git工作得小心翼翼,特別是涉及到一些高階操作,例如 reset, rebase 和 merge。甚至一些很小的操作,例如刪除乙個分支,我都擔心資料丟失。

不久之前,我在做一些大動作(rebasing)之前,我總是備份整個版本庫,以防萬一。直到最近我才發現git的歷史記錄是不可修改的,也就是說你不能更改任何已經發生的事情。你做的任何操作都只是在原來的操作上修改。也就是說,即使你刪除了乙個分支,修改了乙個提交,或者強制重置,你仍然可以回滾這些操作。

讓我們來看一些例子:

$ git init

$ touch foo.txt

$ git add foo.txt

$ git commit -m "initial commit"

$ echo 'new data' >> foo.txt

$ git commit -a -m "more stuff added to foo"

你現在看git的歷史記錄,你可以看到兩次提交:

$ git log

* 98abc5a (head, master) more stuff added to foo

* b7057a9 initial commit

現在讓我們來重置回第一次提交的狀態:

$ git reset --hard b7057a9

$ git log

* b7057a9 (head, master) initial commit

這看起來我們是丟掉了我們第二次的提交,沒有辦法找回來了。但是 reflog 就是用來解決這個問題的。簡單的說,它會記錄所有head的歷史,也就是說當你做 reset,checkout等操作的時候,這些操作會被記錄在reflog中。

$ git reflog

b7057a9 head@: reset: moving to b7057a9

98abc5a head@: commit: more stuff added to foo

b7057a9 head@: commit (initial): initial commit

所以,我們要找回我們第二commit,只需要做如下操作:

$ git reset --hard 98abc5a

再來看一下 git 記錄:

$ git log

* 98abc5a (head, master) more stuff added to foo

* b7057a9 initial commit

所以,如果你因為reset等操作丟失乙個提交的時候,你總是可以把它找回來。除非你的操作已經被git當做垃圾處理掉了,一般是30天以後。

git 查詢歷史記錄

git log oneline author 其中author為要查詢的作者的名字 如果要查詢多個人的提交歷史,則使用i 下格式 git log oneline author yyy 注意,上面要對 轉義 2 查詢commit中的關鍵字資訊 git log oneline grep 其中 為需要查詢...

檢視資料修改歷史記錄

create table tzy test name varchar2 10 addr varchar2 20 insert into tzy test values 張三 廣東 insert into tzy test values 李四 上海 insert into tzy test value...

git 清除所有歷史記錄

有些時候,git 倉庫累積了太多無用的歷史更改,導致 clone 檔案過大。如果確定歷史更改沒有意義,可以採用下述方法清空歷史,1 先 clone 專案到本地目錄 以名為 mylearning 的倉庫為例 git clone git gitee.com badboycoming mylearning...