目錄
- 前言
- 1. 基本知識
- 2. Demo
- 3. 彩蛋
前言
🤟 找工作,來萬碼優才:👉 #小程序://萬碼優才/r6rqmzDaXpYkJZF
爬蟲神器,無代碼爬取,就來:bright.cn
本身暫存區有多個文件,但手快了,vscode一下子都提交了
(可我只想提交一個啊!)
為了防止走上我的老路,先帶著基本知識才能進行實操!!
1. 基本知識
補充下這幾個基本知識
🧾 一、git log:查看歷史提交記錄
🔹 作用:查看提交歷史,幫助你找到 commit 的 hash 值或了解項目提交演變過程
🔹 常見用法:(命令進入之后,按q進行退出)
默認會顯示詳細的提交信息(commit ID、作者、時間、提交信息等)
git log
截圖如下:
🔹 常用簡化參數:
每個提交顯示成一行:commit_id message,非常適合快速瀏覽歷史
git log --oneline
截圖如下:
圖形化顯示分支結構 + 簡潔日志(推薦查看分支合并結構)
git log --graph --oneline --all
截圖如下:
🔁 二、git reset:回退提交 (這個知識點要著重理解)
git reset 用于改變當前分支的指針位置,可以把代碼狀態退回到某個歷史提交
🔹 三種模式:
模式 | 保留工作區代碼 | 保留暫存區(index) | 用途和風險 |
---|---|---|---|
–soft | ? 保留 | ? 保留 | 回退提交,但保留已暫存的更改(適合重寫提交) |
–mixed(默認) | ? 保留 | ? 清除 | 回退提交,并清除暫存區,保留工作目錄 |
–hard | ? 丟棄 | ? 丟棄 | 回退提交+清除代碼(危險!徹底刪除修改) |
🔹 常見例子:
回退最近一次提交,代碼保持已暫存狀態
git reset --soft HEAD~1
回退提交,清除暫存狀態,代碼回到“未提交”狀態
git reset --mixed HEAD~1
回退提交,并丟棄所有代碼修改。(慎用!)
git reset --hard HEAD~1
回退到指定 commit
git reset --hard <commit_id>
🧭 三、git reflog:記錄 Git 所有 HEAD 移動記錄
🔹 作用:reflog 記錄了 所有的 HEAD 和分支變動,即使你已經 reset 或 hard 刪除了 commit,也可以找回
🔹 用法:
git reflog
輸出類似:
9d2b6b1 HEAD@{0}: reset: moving to HEAD~1
a8ef7c3 HEAD@{1}: commit: 修復 bug
1c5e3b9 HEAD@{2}: commit: 初始提交
如果誤刪了某次提交,可以使用 reflog 找到 commit ID,回退回來:
git reset --hard 9d2b6b1
2. Demo
如果已經push到倉庫了,需要回退并保留代碼到暫存區,具體如下:
git reset --soft HEAD~1 # 回退提交
git reset # 把暫存區文件退到工作區
但是此時分支已經落后了,需要強制push一下才可!
之后提交個別文件即可,但
可能會出現出現:error: failed to push ... (non-fast-forward)
? 如果你確認要覆蓋遠程提交:
git push origin 分支名 --force
截圖如下:
3. 彩蛋
一開始 git reset --hard強制回退,會清除我的暫存區!
這種情況怎么還原:
先通過git reflog
看到類似下面的內容:
a1b2c3d HEAD@{0}: reset: moving to 9a071d5d...
d4e5f6g HEAD@{1}: commit: 某某提交
這里,HEAD@{1} 就是你 reset 之前的位置
git reset --mixed HEAD@{1}
恢復 commit 狀態
恢復暫存區內容
不會自動提交
💡 --mixed 可以把 commit 里的內容還原到暫存區