ARTICLE
Git常用命令及使用技巧
详细介绍 Git 常用命令及实用技巧,包括配置管理、提交撤销、分支操作等核心功能,帮助开发者提升 Git 使用效率并维护清晰的版本历史。
2025年7月7日
8 MIN READ
前言h2
Git 在工作中十分常用,善于使用 Git 技巧,可以在开发中提升效率,并且成就美观的 Git 记录。
本文收录一些 Git 常用命令及使用技巧,帮助快速上手 Git 及查阅,可以使用右上角的搜索功能快速查找,或者使用 Ctrl + F
快速查找。
设置全局配置h2
git config --global user.name "你的用户名"git config --global user.email "你的邮箱"
- 使用
--global
参数,设置全局配置,这样所有项目使用 Git 时,都会使用这个用户名、邮箱。 - 使用
--local
参数,设置当前项目配置,这样当前项目使用 Git 时,才会使用这个用户名、邮箱。
撤销最后一次提交(保留更改)h2
git reset --soft HEAD^
执行这个命令后:
- 当前分支指针回退到上一个提交
- 最后一次提交被”撤销”(但内容还在)
- 所有修改内容都回到暂存区(Staged 状态)
- 工作区文件保持不变
常用场景:
- 修改最后一次提交信息:撤销后重新提交
- 合并多个小提交:撤销几个提交,然后一次性提交
- 重新组织提交内容:重新安排哪些文件在一个提交中
修改最后一次提交h2
git add .git commit --amend -m "新的提交信息"
这会更新之前的提交,而不创建新的提交。
暂存未提交的更改h2
git stash
# 推荐:添加描述信息git stash push -m "描述信息"# 或者简写git stash save "描述信息"
查看 stash 列表:
git stash list
恢复指定的 stash:
# 恢复最新的 stashgit stash pop
# 恢复指定的 stash(不删除)git stash apply stash@{0}
# 恢复指定的 stash(并删除)git stash pop stash@{0}
删除 stash:
# 删除指定 stashgit stash drop stash@{0}
# 清空所有 stashgit stash clear
以图形方式查看提交历史h2
git log --graph --oneline --all
通过变基保持提交历史整洁h2
变基(rebase)是一种 Git 的操作,它可以将多个提交历史合并为一个,并保持提交记录的整洁。
# 将 'n' 替换为提交的数量git rebase -i HEAD~n
命令解释:
git rebase
:变基操作,重新应用提交到新的基点上-i
:交互式模式,打开编辑器让你手动选择如何处理每个提交HEAD~3
:表示最近的3个提交
执行后的操作选项:
pick a1b2c3d 第三个提交pick e4f5g6h 第二个提交pick i7j8k9l 第一个提交
可选操作:
pick
:保留这个提交squash
:合并到上一个提交edit
:暂停,允许修改这个提交drop
:删除这个提交reword
:修改提交信息
常用场景:
- 合并多个小提交:
pick a1b2c3d 添加功能Asquash e4f5g6h 修复功能A的bugsquash i7j8k9l 完善功能A的样式
- 修改提交信息:
reword a1b2c3d 添加功能Apick e4f5g6h 其他提交
注意事项:
- 不要对已推送到远程的提交进行 rebase
- 操作前建议先备份当前分支
- 会改变提交历史,可能影响其他开发者
历史记录整洁且远程仓库同步h2
我们会遇到这样的需求:写好代码,并更新到远程仓库中,但是突然发现有一个地方错误,需要修改,我们又创建了一个提交,并更新到远程仓库,这样会出现两个提交,那么我们该如何使得他们成为一个提交呢?
场景描述
# 当前远程仓库状态:基础提交 → 提交A → 修复A的bug
目标:将这两个提交合并为一个提交。
方案一:Rebase + 强制推送(推荐)
# 1. 交互式变基,合并最近的2个提交git rebase -i HEAD~2
# 2. 在编辑器中设置:pick a1b2c3d 提交Asquash b2c3d4e 修复A的bug
# 3. 编辑合并后的提交信息# 保存后会要求编辑提交信息,可以改为:# "提交A(包含bug修复)"
# 4. 强制推送到远程(覆盖远程历史)git push --force-with-lease origin branch-name
方案二:重置重新提交
# 1. 重置到两个提交之前(保留所有更改)git reset --soft HEAD~2
# 2. 重新提交所有更改为一个提交git add .git commit -m "提交A(包含bug修复)"
# 3. 强制推送git push --force-with-lease origin branch-name
方案三:Stash + Reset + Amend(最简单)
# 1. 暂存最新提交的更改git reset --soft HEAD~1git stash
# 2. 回到第一个提交git reset --soft HEAD~1
# 3. 恢复所有更改并修正提交git stash popgit add .git commit --amend -m "提交A(包含bug修复)"
# 4. 强制推送git push --force-with-lease origin branch-name
方案四:创建新提交(最安全)
如果不想改变已有历史,可以创建一个新的合并提交:
# 1. 重置到提交A之前(保留更改)git reset --soft HEAD~2
# 2. 重新提交git add .git commit -m "提交A(完整版本)"
# 3. 推送新提交git push origin branch-name
最终效果对比
方案一、二、三的结果:
基础提交 → 提交A(包含bug修复)
远程只有1个新提交
方案四的结果:
基础提交 → 提交A → 修复A的bug → 提交A(完整版本)
远程有3个提交
使用建议
可以使用强制推送的情况:
- 个人分支或功能分支
- 没有其他人基于这些提交工作
- 还没有合并到主分支
应该使用方案四的情况:
- 主分支(master/main)
- 已经被其他人拉取的提交
- 团队共享的分支
安全提示:
- 使用
--force-with-lease
而不是--force
- 操作前确认没有其他人在相同分支上工作
- 建议先备份当前分支:
git branch backup-branch
重点:
- 方案一、方案二、方案三,都是修改本地分支的记录,最后使用
git push --force-with-lease origin branch-name
,强制推送,这是最关键的命令
列出所有分支(本地和远程)h2
git branch -a
清理未跟踪的文件和目录h2
# 建议先使用 --dry-run 查看会被清理的文件和目录git clean -fd --dry-run# 清理git clean -fd
跟踪上游分支h2
让本地分支与远程分支保持同步。
git branch --set-upstream-to=origin/main
撤销已推送的提交h2
撤销特定提交的更改而不更改历史记录。
git revert <commit-id>
重置到指定提交h2
使用 git reset --hard [commit-hash]
可以将当前分支重置到指定的提交状态,丢弃所有后续的更改。注意,这将永久删除未保存的更改。
git reset --hard [commit-hash]
持续更新中…