Git 常用命令笔记(补充回滚操作)
本文档按工作流程分类整理常见 Git 命令,包含示例与说明,适合日常快速查阅。
一、仓库创建与克隆
1.1 初始化新仓库
git init
说明:将当前目录初始化为 Git 仓库,生成 .git目录。
1.2 克隆完整仓库
git clone https://github.com/user/repo.git
说明:克隆远程仓库到当前目录,默认使用 origin作为远程仓库别名,并克隆所有分支。
1.3 克隆指定分支
git clone -b branch_name https://github.com/user/repo.git
说明:只克隆远程仓库的特定分支(branch_name)。
二、提交与推送
2.1 查看状态
git status
说明:查看工作区与暂存区的文件状态。
2.2 添加文件到暂存区
# 添加指定文件
git add file1.txt
# 添加所有更改(包括新文件、修改、删除)
git add .
# 添加所有修改与删除的文件,不包括新文件
git add -u
2.3 提交更改
# 提交并直接填写提交信息
git commit -m "feat: add login function"
# 提交时跳过暂存区(只提交已跟踪文件的修改)
git commit -am "fix: update config"
# 修改上一次提交的信息(未推送时)
git commit --amend
说明:
-m直接填写提交信息,推荐使用规范的提交信息格式。-a自动添加已跟踪文件的修改,不包括新文件。--amend可修改上一次提交的信息或内容,谨慎在已推送后使用。
2.4 推送至远程仓库
# 推送当前分支到远程同名分支
git push
# 推送指定分支到远程
git push origin branch_name
# 推送并设置上游分支(首次推送时常用)
git push -u origin branch_name
# 强制推送(谨慎使用,会覆盖远程历史)
git push -f
2.5 拉取更新
# 拉取远程分支并合并(相当于 fetch + merge)
git pull
# 拉取远程分支并使用变基整合
git pull --rebase
# 拉取指定远程分支
git pull origin branch_name
三、分支管理
3.1 查看分支
# 查看本地分支
git branch
# 查看所有分支(包括远程)
git branch -a
# 查看分支及最近提交
git branch -v
3.2 创建与切换分支
# 创建新分支
git branch new_branch
# 切换分支
git checkout branch_name
# 创建并切换到新分支
git checkout -b new_branch
# 切换到上一个分支
git checkout -
3.3 合并分支
# 将 branch_name 合并到当前分支
git merge branch_name
# 使用变基整合分支(保持线性历史)
git rebase branch_name
# 合并单次提交(cherry-pick)
git cherry-pick commit_hash
说明:
cherry-pick可将某次提交单独应用到当前分支。- 变基会修改提交历史,公共分支慎用。
3.4 删除分支
# 删除本地分支
git branch -d branch_name
# 强制删除本地分支(未合并时)
git branch -D branch_name
# 删除远程分支
git push origin --delete branch_name
四、暂存、撤销与回滚
4.1 暂存当前修改
# 暂存工作区所有修改
git stash
# 暂存并添加说明
git stash save "message"
# 暂存包括未跟踪的文件
git stash -u
4.2 查看与恢复暂存
# 查看暂存列表
git stash list
# 恢复最近一次暂存并删除记录
git stash pop
# 恢复指定暂存(stash@{n})
git stash apply stash@{0}
# 删除暂存记录
git stash drop stash@{0}
# 清空所有暂存
git stash clear
4.3 撤销与回退
# 撤销工作区的修改(未 add)
git checkout -- file.txt
# 撤销暂存区的修改(已 add)
git reset HEAD file.txt
# 回退到指定提交(保留工作区)
git reset --soft commit_hash
# 回退到指定提交(清除工作区)
git reset --hard commit_hash
注意:--hard会丢弃所有未提交的更改,谨慎使用。
4.4 回滚特定提交
# 回滚单次提交(创建反向提交)
git revert commit_hash
# 回滚最近一次提交
git revert HEAD
# 回滚最近3次提交
git revert HEAD~3
# 回滚连续提交(如提交A到B之间的所有提交)
git revert commit_A^..commit_B
# 回滚合并提交
git revert -m 1 merge_commit_hash
说明:
git revert会创建一个新的提交来撤销指定提交的更改,不会修改历史,适合已推送到远程的提交。HEAD~3表示当前分支最新的3次提交。commit_A^..commit_B表示从commit_A的下一个提交到commit_B的所有提交。-m 1用于回滚合并提交,1 表示保留主分支(被合并进来的分支)的更改。
示例:
- 查看提交历史,找到要回滚的提交哈希:
git log --oneline
# 输出:
# a1b2c3d (HEAD -> main) feat: add new API
# e4f5g6h fix: update config
# i7j8k9l feat: initial commit
- 回滚特定的提交(如
e4f5g6h):
git revert e4f5g6h
这会创建一个新的提交,撤销 e4f5g6h这次提交的更改。
- 回滚最近的一次提交:
git revert HEAD
- 回滚多个提交(如最近2次提交):
git revert HEAD~2..HEAD
五、冲突处理
5.1 冲突解决流程
- 拉取或合并时发生冲突
git pull origin master
# 提示 CONFLICT
- 打开冲突文件,标记类似:
<<<<<<< HEAD
本地代码
=======
远程代码
>>>>>>> branch_name
- 手动编辑文件,保留需要的代码,删除标记。
- 标记冲突已解决:
git add resolved_file.txt
git commit -m "resolve conflict"
5.2 终止合并/变基
# 终止合并(回到合并前状态)
git merge --abort
# 终止变基
git rebase --abort
六、常用查询与配置
6.1 查看提交历史
# 简洁格式
git log --oneline
# 带分支图
git log --graph --oneline
# 查看最近3次提交
git log -3
6.2 配置信息
# 设置用户名/邮箱(全局)
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
# 查看配置
git config --list
七、常见报错与处理
| 报错信息 | 可能原因 | 解决方案 |
|---|---|---|
fatal: not a git repository | 不在 Git 仓库目录 | 使用 git init或切换到正确目录 |
error: failed to push some refs | 远程有本地没有的新提交 | 先执行 git pull再推送 |
error: Your local changes would be overwritten | 工作区有未提交的修改 | 使用 git stash暂存,或提交修改 |
CONFLICT (content): Merge conflict | 合并时发生冲突 | 手动解决冲突后 add和 commit |
fatal: refusing to merge unrelated histories | 两个独立仓库的历史不相关 | 添加 --allow-unrelated-histories参数 |
error: Your local changes to the following files would be overwritten by checkout | 切换分支时工作区有未提交修改 | 先提交或暂存修改 |
八、回滚操作总结
| 场景 | 推荐命令 | 说明 |
|---|---|---|
| 撤销工作区修改 | git checkout -- file | 未添加到暂存区 |
| 撤销暂存区修改 | git reset HEAD file | 已 add 但未 commit |
| 撤销最近提交但保留修改 | git reset --soft HEAD~1 | 回退提交,修改保留在工作区 |
| 完全撤销最近提交 | git reset --hard HEAD~1 | 彻底丢弃最近一次提交 |
| 回滚已推送的提交 | git revert commit_hash | 创建反向提交,不修改历史 |
| 回滚合并提交 | git revert -m 1 merge_hash | 回滚合并,保留主分支更改 |
| 选择性回滚 | git cherry-pick -n commit_hash然后修改 | 选择性地应用提交的更改 |
九、最佳实践提示
-
提交信息规范:使用清晰的前缀(如
feat:、fix:、docs:)。 -
频繁提交:小步提交,便于回退与审查。
-
分支策略:功能开发使用新分支,主分支保持稳定。
-
拉取前暂存:在不确定时,先
git stash再拉取更新。 -
慎用强制推送:避免在公共分支使用
git push -f。 -
回滚选择:
- 未推送的提交:使用
git reset - 已推送的提交:使用
git revert - 团队协作时:优先使用
git revert避免历史冲突
- 未推送的提交:使用
按此笔记分类查询,可覆盖日常 Git 使用大部分场景。建议结合实际操作加深记忆,并可通过 git --help查看命令详细文档。