回覆列表
-
1 # 使用者9685167322496
-
2 # 使用者1465424935672
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 commit -C HEAD -a --amend
4.2反轉提交
建立一個新的反向的提交來抵消原來的提交
git revert -n HEAD 反轉當前版本庫最新的提交併且快取起來。但是不提交
4.3復位
5重新改寫歷史記錄
什麼時候需要改寫歷史記錄?
給歷史記錄重新排序
多個提交合併成一個提交
一個提交分解成多個提交
git rebase -i HEAD~3
本質上利用的是變基操作,定位到你想變化的範圍之前。然後進入編輯器去修改你想修改的部分。完成之後再回到當前的末梢。
如果有多人協作和遠端bare repo,那麼這種事最好不要乾了。
一定要刪歷史記錄的話,filter-branch也行,不過我也只有笨的辦法:git status羅列下已刪除的檔案列表,全部填到 filter-branch 命令列的 rm 部分裡面就是。期待有人答一份。當然聰明的辦法的思路是有的:藉助bash程式設計把已刪除檔名自動羅列到命令列裡。不過暫時沒條件就答不出了。
附:
方法可以是這樣:
初步確認。不過備份好點。
再補充下:
filter-branch裡面使用 git rm --ignore-unmatch 可以避免過多警告。
--prune-empty可以在一個提交的所有檔案都被清空之後摘除這個提交。
同樣的,git rm a b c d/e/f/g 可以刪掉這些不同位置的檔案,git rm -rf a b c d可以檔案、資料夾都刪掉。
所以無論你的問題是什麼,只有一件事要做,提供一個檔名列表出來,送給git filter-branch ..."git rm ..." 語句去做。