ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

实用Git命令总结

2026/9/16 10:56:52 拓冰建站 浏览量
实用Git命令总结 在使用Git时掌握一些实用命令是至关重要的。从初始化仓库到提交更改从分支管理到合并冲突从查看历史到对比差异熟练使用Git命令将帮助我们更好地管理和追踪代码的变化轻松地与团队协作并且在需要时快速解决问题。本文将总结一些在工作中实用的Git命令以及使用场景帮助我们更好地理解和利用Git的功能提高版本控制技能为开发工作带来更大的效率。下面让我们按照工作中实际场景一起由浅入深探索这些实用的Git命令。1. 主干工作流程# 下载代码 git clone gitgithub.com:golfxiao/sqlproxy.git # 添加修改到本地仓库 git add . # 提交修改 git commit -a -m comments# 上传之前先更新一下会尝试自动合并 git pull # 如果本地与远程发生冲突可以选择使用本地还是远程 # 解决完冲突后要用git add命令将冲突文件标记为已解决 git checkout --ours/--theirs file # 也可以在pull自动选择保留本地修改还是远程修改 git pull -X ours/theirs # 推送修改到远程主干 git push2. 分支工作流程# 新建一个work分支 git branch work # 切换到work分支 git checkout work # 查看有哪些分支 git branch -r # 查看当前分支是从哪个分支拉出来的 git reflog show work# 添加修改 git add file3 # 提交到本地仓库 git commit -m add file3 # 现在远程还没有work分支需要set-upstream # 这样在远程仓库就有了work分支之后可以直接git push git push --set-upstream origin work # 分支工作过程中从其它分支同步最新修改 git merge name3. 创建分支的几种方法# 创建并切换到新的分支 git checkout -b branch # 从指定commit 创建新的分支 git branch branch start point # 同上创建后自动切换到新的分支 git checkout commitId -b branch# 比较指定分支与当前分支的差异 git checkout -p branch # 切换分支时将当前分支修改的内容一起打包带走 git checkout --merge branch# 从指定分支feature_xxx替换部分文件夹到当前分支 git checkout feature_xxx 目标文件夹或目标文件名 # 例如 git checkout uclog_optimize golib/stack4. 分支工作完成后合回Master# 切换到主干 git checkout master # 合并分支的修改到主干 git merge work# 删除工作分支 git branch -d work # 将主干合并的修改推送到远程仓库 git push # 删除远程分支 git push origin :work# 提交前需要先拉取远程更新如果出现冲突pull命令本身会自动尝试合并 git pull # 确定的前提下直接对全部应用本地或远端来快速合并冲突 git checkout --ours / --theirs [path]# 如果自动合并失败需要手动解决冲突解决完后再Add git add file1 # 提交手动解决的冲突内容到本地仓库 git commit -m resolve confict in file1 # 推送到远程分支 git push5. 本地创建仓库并推送到远程# 新建一个目录作为工作目录 mkdir git_demo cd git_demo # 在本地初始化git仓库 git init # 添加远程仓库地址将本地仓库关联到git上 git remote add origin gitgithub.com:golfxiao/gotool.git# 添加文件修改 git add file1 # 提交代码到本地仓库 git commit -m add file3 # 推送到远程因为现在远程还没有master分支所以需要set-upstream # 此命令执行完会自动创建远程仓库 git push --set-upstream origin master6. 撤回修改的方法场景1未提交# 将本地未提交的所有修改抹除 git checkout . # 将本地指定文件的修改抹除 git checkout [filename] # 撤回git add的内容,修改内容还在本地(head是一个指向当前分支最新提交的指针) git reset HEAD [filename]场景2已提交未推送本地仓库已经被污染# 撤销最近一次提交 git reset HEAD~1 # 撤销指定的提交 git reset commit # 回退本地所有已提交但未push到远程仓库的内容但保留工作区和暂存区的更改 # 此操作会重置当前分支指针更改提交历史 git reset --soft origin/master # 除了重置当前分支的指针本地未提交的更改将永久丢弃 git reset --hard origin/master场景3已推送到远程仓库# 将代码回滚到指定的版本 git reset --hard e377f60e28c8b84158 # 强制推送可能需要权限有一定风险一般不建议 git push -f场景4撤销合并# 当分支代码合并出现冲突时可以先撤销合并 git merge --abort # 或者 git reset --merge7. 不提交当前分支的情况下切换到其它分支进行操作如果dev上的功能还没完成又需要去master分支处理更紧急的Bug我们首先会去切换分支git checkout master本地有正在修改的文件将提示错误error : Your local changes to the following files would be overwritten by checkout, please commit ....可以通过以下步骤来解决此问题步骤1将修改内容隐藏并暂存起来# 将dev分支修改内容放到一个临时存储栈 git stash # 确认是否还有要提交的东西应该不会有了 git status步骤2此时可以切换到master分支修复更紧急的Bug……步骤3处理完后就需要回到dev分支来继续刚才未完成的修改# 切回开发分支 git checkout dev # 查看临时栈列表可以利用这个列表来决定从那个地方恢复 git stash list步骤4此时我们有两种方式来恢复刚才暂存的修改# 方式1恢复暂存项但不删除stash内容0是暂存序号 git stash apply stash{0} # 方式2恢复的同时将stash的内容也删了 git stash pop最后当不再需要临时存储栈中的备份时可以清空临时栈git stash clear8. 版本历史与差异对比查看提交历史# 显示最近几次提交 git log -5 # 显示最近几次提交详情 git log -p -5 # 查看未传送到代码库提交的详细信息 # master表示要查看的分支^origin/master表示要排除的参考点分支 git log master ^origin/master查看版本之间差异# 对比两次提交之间的差异其中第1个为较低版本第2个为较高版本diff中是版本2相对于版本1的差异 git diff commit-id-1 commit-id-2 d:/diff.txt # 比较指定文件两次提交之间的差异 git diff commit1 commit12 file_name# 对比暂存区文件与本地仓库的差异 git diff --cached [path]# 查看两个分支之间差异的统计信息 git diff branch1 branch2 --stat # 对比两个分支所有文件的详细差异 git diff branch1 branch2 # 对比两个分支之间具体某个文件的差异 git diff branch1 branch2 具体文件路径9. 打标签# 为某个重要的版本打标签v0.0.4为标签名称 git tag -a v0.0.4 -m 版本4 # 给过去的某个提交打标签, fceb02为commit号 git tag -a v1.2 9 fceb02# 将某个标签推送到远程仓库 git push origin tagname # 将本地的所有TAG推送到远程仓库 git push origin --tags# 查看tag列表 git tag -l # 删除标签 git tag -d v0.0.4 # 远程仓库删除标签 git push origin --delete tagname # 基于某个标签创建分支git中的标签是不允许提交修改的基于某个TAG修复问题需要拉新分支 git checkout -b version2 v2.0.010. commit需要打补丁场景1最近一次commit需要更改# 添加修改到暂存区 git add -A # 不增加新的commit-id将本次修改内容追加到上一次 commit-id 中 git commit --amend场景2很早之前的commit需要更改则需要执行变基操作# 查询提交日志找到要修改commit号之前的一次commit-id以便确定变基的commit范围 # -n表示查看最近n次commit git log [-n]# 开始变基其实就是允许对某个历史提交进行修改 # -i: 表示进入交互模式 # [history-commit-ID]: 上一步查到的commit-id # 在输入命令后你会进入一个文本编辑器 # 这时把你需要更改的 commit 中 开头的 pick 改为 edit表示对这个commit作修改 # 然后保存退出。 git rebase -i [history-commit-ID]# 添加修改 git add -A # 将修改提交到刚刚标为edit的commit中 git commit --amend # 确认修改完成指定commit-id的变基操作 git rebase --continue # 上面这步标志着对历史commit-id修改的结束后续修改会走新的commit11. 挑选commit合并git cherry pick选择某一个分支中的一个或几个commit(s)来进行操作。场景在开发分支和稳定分支合并时有时不想直接合并整个分支以免稳定版本混乱就可以选择一个或多个提交应用到当前分支等价于用指定的commit再次提交。# 挑选单个提交的修改如git cherry-pick 38361a55 git cherry-pick commitHash # 同上不同之处在于会保留原提交者信息。 git cherry-pick -x commit id # 挑选多个提交 git cherry-pick HashA HashB# 挑选一系列的连续提交转移从 A 到 B 的所有提交左开右闭A必须早于B但不包括A git cherry-pick A..B # 同上但包括起始commit-id, commit-id只需要前6位即可 git cherry-pick start-commit-id^..end-commit-id12. SHA commitIdSHA指完整的commit-id, 是一个40位的十六进制字符哈希计算而来commit-id: 通常指页面或commit命令提交时返回的简写版本# 查看最新提交的SHA: 42e2e5af9d49de268cd1fda3587788da4ace418a git show -s --format%H # 查看最新提交的commit-id: 42e2e5a git show -s --format%h# 用指定的commit创建新分支 git branch 新分支名称 SHA值 # 直接checkout指定的commit git checkout SHA值13. rebase用法在使用git pull 拉取代码时遇到下面的提示hint: You have divergent branches and need to specify how to reconcile them. hint: You candoso by running one of the following commands sometime before hint: your next pull: hint: hint:gitconfig pull.rebasefalse# mergehint:gitconfig pull.rebasetrue# rebasehint:gitconfig pull.ff only# fast-forward onlyhint: hint: You can replacegit configwithgit config --globaltoseta default hint: preferenceforall repositories. You can also pass --rebase, --no-rebase, hint: or --ff-only on thecommandline to override the configured default per hint: invocation.这是 Git 告诉你 git pull 默认行为还没配置。两种选项的区别选项一merge默认方式会创建一个额外的 merge commit 把两边的改动合在一起。gitconfig pull.rebasefalsegitpull origin master历史走向A---B---C origin/master \ \ D---------E ← merge commit合并点会创建一个额外的 merge commit历史保留完整的分支拓扑但可能显得杂乱选项二rebase推荐gitconfig pull.rebasetruegitpull--rebaseorigin master历史走向A---B---C origin/master \ D ← 你的提交被重放到远程最新提交之上不会产生 merge commit历史是线性的更干净便于回溯参考阅读合并多次commithttps://segmentfault.com/a/1190000007748862CodeReview时能用上的一些git操作https://hijiangtao.github.io/2020/01/12/Tips-of-Git-for-Code-Review/git cherry pick教程https://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html通过SHA获取指定版本仓库https://blog.csdn.net/FrontierSetter/article/details/83413889