⑴ git查看歷史版本
我們簡單的描述一個例子:a)初始化操作有兩個文件file1.txt和file2.txt1, 初始化的時候就有這兩個文件操作:git initgit statusgit add .git mit -m 「init version」2, 在master分支上修改了file1.txt,並提交操作:(修改file1.txt)git add file1.txtgit mit -m 「change file1」3, 然後新建分支banana,並切換到banana分支上操作:git branch bananagit checkout banana4, 修改file1.txt和file2.txt,並提交。
操作:(修改file1.txt和file2.txt)git add file1.txt file2.txtgit mit -m 「change by banana」這個時候,我們可以輸入 gitk,查看一下當前的版本情況。如下圖:git-0015, 然後,切換到master分支上,修改file2.txt,並提交。
操作:git checkout master(修改file2.txt)git add file2.txtgit mit -m 「change by master」輸入gitk,查看當前版本情況,如下圖:git-002b)發現問題需要查看歷史版本我們現在發現當前的版本有點問題,還不能提交到版本庫。1,我們需要從git mit中返回.則輸入:git reset --soft HEAD^解釋一下,HEAD是當前分支的最新版本。
^表示父節點。當前節點的父節點,就是上一次提交的版本。
也就是標記為「change file1」的版本。問為什麼不是」change by banana」這個版本呢?不同的分支哦。」
change by banana」是banana分支的最新代碼,和master分支不同的。這個時候輸入git status看看,是不是顯示file2.txt修改了沒有提交呢。
2,我們需要從git add中返回再仔細查看之後,我們發現file2.txt真的寫錯了,需要返回到git add之前的狀態。輸入:git reset -q file2.txt這個時候,file2.txt就回到了解放前了。
用git status查看一下,file2.txt是」change not staged for mit」狀態。3,回到沒有做過的情況我們最終確定,最後一次修改的file2.txt是無用的代碼,我們需要廢棄掉。
注意,這個操作不能恢復的哦。git reset --hard這個命令,不能指定具體的文件。
是把當前的修改全部清除,恢復到最後一次提交的版本。這個時候,用gitk查看一下:git-003已經徹底回復到了「change file 1」的版本了。
4,直接回復到某個版本我們現在切換到banana分支。git checkout banana然後用gitk看一下。
可以看出,我們之前的操作,對banana分支一點影響也沒有。現在我們需要把banana分支回復到初始狀態,但是當前的改動的代碼還是需要留著。
我們可以看,init版本是當前版本的父節點的父節點。我們可以這么操作:git reset --soft HEAD^^然後用gitk看一下:git-004最近的版本已經變成了init version了。
所有的改動都是add未提交狀態。5,得到當前最新代碼最後。
我們把file1.txt和file2.txt都刪掉。我們需要從版本庫中取得當前最新的代碼。
很簡單:git checkout master如果是要banana分支的最新代碼,則:git checkout banana以上的操作,我們知道了如何查看版本分支,和如何回復到以前的版本。
1.查看Git日誌:
命令:git log 默認不加參數,git日誌會按照最新的日期從上往下顯示 參數:-p 顯示版本間的代碼差異
-數字 顯示部分的提交
-哈希值 顯示指定的版本
2.指定查找范圍:
--since="5 hours" 顯示最近5小時內的提交 --since="5 hours" -1 顯示5小時內的最後一個提交 --before 用法和--since的用法差不多,顯示的是在某個時間點之前的提交 版本1..版本2 說明:版本1之後到版本2的所有提交,版本2可以用 HEAD(要注意大寫)表示當前的最新版本 版本^ 回溯一個版本 注意: 在windows下要加雙引號"版本^" ~N: 回溯N個版本
3.查看指定版本之間的差異
git diff 版本號 說明:當前目錄樹和對應版本號的差異 git diff --stat 說明:統計對應改動的代碼量
4.撤銷修改
4.1增補修改(只能用於針對最後一個提交)
git mit -C HEAD -a --amend
4.2反轉提交
創建一個新的反向的提交來抵消原來的提交
git revert -n HEAD 反轉當前版本庫最新的提交並且緩存起來。但是不提交
4.3復位
git reset --soft 緩存因復位帶來的差異但是不提交,也就是復位到上一個提交前的狀態 git reset --hard 同時刪除提交 例子:git reset --hard HEAD^ 復位到HEAD之前的那個版本
5重新改寫歷史記錄
什麼時候需要改寫歷史記錄?
給歷史記錄重新排序
多個提交合並成一個提交
一個提交分解成多個提交
git rebase -i HEAD~3
本質上利用的是變基操作,定位到你想變化的范圍之前。然後進入編輯器去修改你想修改的部分。完成之後再回到當前的末梢。
給歷史記錄重新排序多個提交合並成一個提交一個提交分解成多個提交git rebase -i HEAD~3本質上利用的是變基操作,定位到你想變化的范圍之前.指定查找范圍:--since="5 hours"。
然後進入編輯器去修改你想修改的部分:版本1之後到版本2的所有提交,版本2可以用 HEAD(要注意大寫)表示當前的最新版本 版本^ 回溯一個版本 注意: 在windows下要加雙引號":git log 默認不加參數,git日誌會按照最新的日期從上往下顯示 參數; -1 顯示5小時內的最後一個提交 --before 用法和--since的用法差不多:-p 顯示版本間的代碼差異-數字 顯示部分的提交-哈希值 顯示指定的版本2..版本2 說明;版本^" ~N: 回溯N個版本3; 顯示最近5小時內的提交 --since="5 hours".3復位git reset --soft 緩存因復位帶來的差異但是不提交,也就是復位到上一個提交前的狀態 git reset --hard 同時刪除提交 例子:git reset --hard HEAD^ 復位到HEAD之前的那個版本5重新改寫歷史記錄什麼時候需要改寫歷史記錄,顯示的是在某個時間點之前的提交 版本1.查看指定版本之間的差異git diff 版本號 說明:當前目錄樹和對應版本號的差異 git diff --stat 說明:統計對應改動的代碼量4.撤銷修改4.1增補修改(只能用於針對最後一個提交)git mit -C HEAD -a --amend4.2反轉提交創建一個新的反向的提交來抵消原來的提交git revert -n HEAD 反轉當前版本庫最新的提交並且緩存起來。但是不提交41.查看Git日誌:命令。
git查看提交歷史
這是git中使用平率非常高的一個操作,git中查看提交歷史的功能也非常強大,提供各種篩選和輸出格式定製功能。
最簡單的,運行git log命令,你將看到一個詳細的提交日誌:
git-log
# 當然也可以只查看某個版本
$ git log fd0a1b2
信息內容都很好理解,重點說說第一行mit後這個40個字元的字元串,這是該次提交的對應的SHA-1值,在git中,會對提交(mit)、文件(blob)、目錄(tree)、標簽(tag)生成一個唯一的SHA-1值,git就是基於此來得知文件或目錄的改動,因為這四類對象計算得到的SHA-1值都是唯一的,同時你也可以直接使用SHA-1值來指代相應的對象。比如:
$ git show bdd3996
# 查看某個版本下具體某個文件
$ git show bdd3996 README
git log還有很多命令選項來定製歷史記錄
選項 說明
-(n) 僅顯示最近的 n 條提交
–since,–after 僅顯示指定時間之後的提交
–until,–before 僅顯示指定時間之前的提交
–author 僅顯示指定作者相關的提交
–mitter 僅顯示指定提交者相關的提交
–reverse 按時間倒序顯示
-p 按補丁格式顯示每個更新之間的差異
–stat 顯示每次更新的文件修改統計信息
–shortstat 只顯示 –stat 中最後的行數修改添加移除統計
–name-only 僅在提交信息後顯示已修改的文件清單
–name-status 顯示新增、修改、刪除的文件清單
–abbrev-mit 僅顯示 SHA-1 的前幾個字元,而非所有的 40 個字元
–relative-date 使用較短的相對時間顯示(比如,「2 weeks ago」)
–graph 顯示 ASCII 圖形表示的分支合並歷史
第一步: git log 查看之前的mit的id,找到想要還原的版本第二步: git reset --hard 還原到之前的某個版本第三步: git push -f origin master 強制push到遠程 前兩步在eclipse中也可操作: team --> show in hostory 找到想還原的版本 然後再強制push (git push -f origin master)。
有些時候,在一些特殊情況下,我們需要將代碼恢復到一個歷史的提交版本上。
而這個歷史提交版本,離最新的提交已經比較久遠了。比如,我希望將如下的倉庫的提交,恢復到上上上上次提交。
當然,我可以一次一次的 revert,但是有沒有更快更簡單的辦法呢?暴力的方式如果你的倉庫是自己在用(不影響別人),那麼你可以使用 git reset --hard 來恢復到指定的提交,再用 git push -f 來強制更新遠程的分支指針。為了保證萬一需要找回歷史提交,我們可以先打一個 tag 來備份。
對於剛剛的例子,需要執行的命令就是:// 備份當前的分支到 backup_mitgit tag backup_mitgit push origin backup_mit// 重置 source 分支git reset --hard 23801b2// 強制 push 更新遠程分支git push origin source -f溫和的方式如果你的倉庫是多人在協作,那麼你這么操作會使用別人本地的代碼庫混亂,所以只能建一個新的提交,這個新的提交中把想取消的提交都 revert 掉,那麼具體應該如何做呢?方法如下:首先,和剛剛一樣,用 git reset --hard 23801b2 將代碼切換到目標提交的 id。接下來,用 git reset --soft origin/source 命令,將當前代碼切換回最新的提交。
執行完上面兩步後,你的倉庫還是最新的提交,但是工作區變成了歷史的提交內容,這個時候用 git add 和 git mit 即可。最終完成的效果如下:不過經過念茜的提醒,該方法需要保證 reset 的時候沒有別人做新的提交,如果有的話,會一並把別人的提交也撤銷了。
所以還是挺危險的,慎用。雖然用到的時候很少,但是理解它的原理有助於大家理解 Git 的工作區,暫存區和版本庫的各種指針操作的意義,希望對大家有用。
#git reflog git log --pretty =oneline結果如下: Add git user profile functions for prompt Merge pull request #4957 from TorrentKatten/ localization support for clock in candy Merge pull request #4956 from RobLoach/ Add 'asdf' plugin。
⑵ git 文件移動 修改歷史還在嗎
不會在的了,在新文件夾里看到的歷史是從移動的那一刻起的。
但可以在移動前的歷史里找到,再從日誌文件里查看此文件的日誌。
⑶ git怎麼看已刪除文件的提交歷史
git log -p 刪除文件名稱
這里會列出指定文件的所有修改記錄,也包含刪除記錄了。
⑷ 如何查找Git伺服器上的操作歷史記錄
代碼提交 代碼提交一般有五個步驟: 1.查看目前代碼的修改狀態 2.查看代碼修改內容 3.暫存需要提交的文件 4.提交已暫存的文件 5.同步到伺服器 1. 查看目前代碼的修改狀態 提交代碼之前,首先應該檢查目前所做的修改