1. 代碼回退與歷史修改
git reset
模式 | 命令示例 | 作用范圍 | 適用場景 |
---|---|---|---|
--soft | git reset --soft HEAD~1 | 僅移動?HEAD ?指針 | 重新提交之前的修改 |
--mixed | git reset HEAD~1 ?(默認) | 重置暫存區 | 取消已?add ?但未提交的文件 |
--hard | git reset --hard a1b2c3d | 徹底丟棄工作區和暫存區 | 徹底回退到某個版本(慎用!) |
git revert
git revert <commitid> # 生成一個反向提交
git revert -m 1 <merge_commit> # 撤銷合并提交
-
特點:安全撤銷(保留歷史),適合已推送的提交
git commit --amend
?
git commit --amend # 修改最近提交信息
git commit --amend --no-edit # 只修改提交內容
注意:僅限未推送的提交!
2. 分支管理
git branch
命令 | 作用 |
---|---|
git branch -f main HEAD~3 | 強制移動分支指針 |
git branch -d feature | 刪除已合并分支 |
git branch -D hotfix | 強制刪除未合并分支 |
git branch --set-upstream-to=origin/main | 綁定遠程分支 |
3. 提交與變更查看
git log
git log --oneline --graph -n 5 # 簡潔圖形化歷史
git log -p -S "keyword" # 搜索代碼變更
git log --since="2024-01-01" --author="John" # 條件過濾
?git show
git show HEAD~2:src/main.c # 查看歷史文件內容
git show a1b2c3d --stat # 顯示提交影響的文件
4. 暫存與恢復
git stash
git stash push -m "WIP: login feature" # 暫存并命名
git stash list # 查看暫存棧
git stash apply stash@{1} # 恢復指定暫存
git stash drop stash@{0} # 刪除暫存
git checkout HEAD -- <file>
git checkout HEAD -- config.yml # 從最近提交恢復文件
git checkout a1b2c3d -- . # 恢復整個目錄到歷史版本
5. 差異比較與補丁
git diff
命令 | 比較范圍 |
---|---|
git diff | 工作區 vs 暫存區 |
git diff --cached | 暫存區 vs 最新提交 |
git diff HEAD~2 HEAD | 兩個提交間的差異 |
git diff --word-diff | 單詞級差異顯示 |
補丁操作
git diff > changes.patch # 生成補丁
git apply --check changes.patch # 測試應用
git apply changes.patch # 應用補丁
git format-patch HEAD~2 # 生成可郵件發送的補丁
?
命令對比表
場景 | 推薦命令 | 替代方案 |
---|---|---|
撤銷本地修改 | git checkout HEAD -- file | git restore file |
修改提交信息 | git commit --amend | git rebase -i |
安全撤銷提交 | git revert | git reset + force push (危險) |
暫存臨時改動 | git stash | 手動復制文件 |
進階技巧
-
組合操作
# 重置到某個提交但保留工作區修改 git reset --hard a1b2c3d && git stash apply
-
精確回退
# 僅回退某個文件到指定提交 git checkout a1b2c3d -- src/main.c
-
排查問題
# 顯示誰最后修改了某行代碼
git blame -L 10,15 file.txt