Git 从入门到进阶:基础命令、分支管理与实战工具详解
Git 从入门到进阶基础命令、分支管理与实战工具详解目录第一章 git入门第二章 git基础第三章 git分支机制第四章 git工具第一章 git入门git用户身份配置gitconfig--globaluser.namexinggitconfig--globaluser.email huangexm.comgit检查个人配置gitconfig--list获取帮助githelpconfig第二章 git基础初始化git仓库gitinit对现有文件进行版本控制gitadd*.cgitaddwenjiangitcommit -m第一个文件克隆现有仓库gitclone https://gitee.com/sfsfd/myTest.git test(自定义仓库名)查看当前状态gitstatus追踪新文件gitaddtext显示更简洁的状态信息gitstatus -s或者(git status --short)例子$gitstatus-sA hello.txt(以及add过的文件m 为修改过的文件)?? nihao.txt(??为未成追踪的文件)忽略文件cat.gitgnore例子*.a(忽略.a类型文件)bulid/(忽略bulid/ 目录下的所有文件)bulid/*.txt(忽略bulid/ 目录下的.txt文件)查看已暂存和未暂存的变更gitdiff(只能看到modified的文件)gitdiff--staged(将暂存的变更与上一次的内容做比较)gitdiff--cached(查看当前已暂存的更改)提交更改gitcommit -m更改描述例子$gitcommit-m新的内容[master e553f82]新的内容2files changed,2insertions()create mode100644hello.txt create mode100644nihao.txt跳过暂存区注意两种方法的使用前提是文件之前已经提交过一次gitcommit-a-m修改方式一gitcommit-amnihao修改方式二移除文件gitrmnihao.txt(可以把工作区的文件移除)gitrm-fhello.txt(把暂存区的文件移除强制移除无法修复)gitrm--cachednihao.txt(把暂存区的文件搬回到工作区)gitrm\*.log(在*前必须加上反斜杠这条命令的功能为移除所有以.log为扩展名的文件)重命名文件gitmvnihao.txt huang.txt 上述语句相当于下面的三条语句mvnihao.txt huang.txtgitrmnihao.txtgitaddhuang.txt查看提交历史gitlog-p-2-p可以看到每次提交的差异-2为显示两条数据gitlog--stat(可以查看改动的文件新增或删除的行)gitlog--prettyoneline 每一行显示一个提交的内容gitlog--prettyformat:%h -%an,%ar:%sar日期h:提交对象简短值an作者的名字s:提交的主题gitlog--prettyformat:%h - %an--graph--graph为简单图表显示gitlog--oneline--decorate(可以详细地看到当前分支所指向的对象)gitlog--oneline--graph更为简单的图表显示撤销操作gitcommit--amend更改commit的描述信息撤销已暂存的文件gitreset--hardhello.txt(方式一)gitrestore--stagedhello.txt 方式二建议用此方式撤销对文件的修改gitrestore hello.txt(方式一建议使用)gitcheckout -- hello.txt (方式二使用有可能导致原先的修改内容丢失使用有风险显示远程仓库gitremote-v添加远程仓库gitremoteaddxiao(url_name)https://gitee.com/huang/myTest.git 添加远程仓库并名命为xiaogitfetch xiao 拉取远程仓库数据包括远程新增加的分支,只拉取不会自动合并将数据推送到远程仓库gitpush origin master检查远程仓库gitremote show origin删除和重命名远程仓库重命名gitremoterenamehuang xiao(把远程仓库链接的huang重命名为xiao)删除gitremotermhuang列举标签gittag注释标签gittag-av1.0-mhello.txt(标记版本为v1.0)gitshow v1.0(展示版本v1.0的信息)轻量标签gittag v1.1-lw补加标签gittag-av1.3 4b2e97d共享标签gitpush origin v1.1(把本地v1.1标签推送到云端)gitpush origin--tags(把本地全部tag推送到云仓库)git别名gitconfig--globalhuang.co checkoutgitconfig--globalhuang.br branch第三章 git分支机制创建新分支gitbranch testing切换分支gitcheckout master(方式一)gitswitch master 方式二分支管理gitbranch 列出所有分支gitbranch-v查看每个分支上的最新提交信息gitbranch--merged筛选已经合并主分支的所有子分支gitbranch --no-merged 筛选没有合并主分支的所有子分支gitbranch-dhuang(在已经合并前提下删除huang分支)gitbranch-Dhuang(在没有合并到主分支下删除huang分支)远程分支gitfetch origin(可以拉取远程的最新数据)推送gitpush origin huang(在本地huang分支上提交到远程huang分支如果远程没有huang分支时会自动创建)gitpush origin huang:huang_dev(创建远程的huang_dev分支并推送到远程的huang_dev分支上本地的huang分支对应远程的huang_dev分支)gitcheckout-bhuangTesting origin/huang 创建本地的huangTesting分支并与远程的huang分支关联在一起gitpush origin HEAD:huang(上述关联远程huang分支后提交到远程huang分支的操作)跟踪分支gitcheckout huang 创建本地huang分支并自动追踪远程上的huang分支gitcheckout--trackorigin/huang 创建本地huang分支并追踪远程上的huang分支gitbranch-vv(查看已经设置了追踪的哪些追踪分支)拉取gitfetch origin(拉取远程所有最新的数据)删除远程分支gitpush origin--deletehuang第四章 git工具修订某个版本gitlog --abbrev-commit--prettyoneline 输出记录为单行且sha1为7为数gitshow 97c2272 展示97c2272 所对应的提交信息内容分支引用gitrev-parse huang(某个分支指向的sha1值)gitreflog 查看HEAD和分支引用记录gitshow HEAD{2.day.ago}查看两天前的记录祖先引用git show head^ 查看当前父提交的前一个父提交查看提交范围gitlog master..huang(huang分支上有而master分支上没有)gitlog huang..master 正好与上面的相反储藏与清理gitstash(储藏未提交的内容)gitstash list(查看储藏未提交的内容)gitstash apply stash{0}(查看某次储藏未提交的内容)gitstash drop stash{0}(删除stash{0}的储藏内容)gitstash show -p(-patch)查看stash中修改的内容从储藏中创建分支gitstash branch huang_dev(创建新的huang_dev分支并包含储藏的内容)清理工作目录gitclean-d-n查看将会被清理的文件既提示删除未被追踪的文件gitstash--all(删除前先保存未被追踪的文件)gitclean-f(将删除所有未被追踪的文件)修改最近一次提交gitcommit--amend(修改最近一次提交信息会改变sha1的值)强制命令filter-branchgitfilter-branch --tree-filterrm -f h.txthead删除h.txt文件并从历史记录中删除掉用时久最好不要使用合并冲突gitmerge huangvihello.txtgitcommit-am解决冲突中止合并gitmerge --abort(退出合并)gitreset--hardhead(回到之前想要的状态)gitmerge -Xignore-space-change huang.txt(合并时忽略空白字符)- submodule子模块(单向)添加子模块gitsubmoduleaddhttps://gitee.com/huangxing/huangxing.git把本地子模块推送到远程分支上gitadd.gitcommit -m子模块gitpush更新本地所有子模块上的数据gitsubmodule foreachgitpull 本地所有的子模块都可以更新到数据删除submodule子模块的四个步骤,可同步删除本地和远端子模块rm-rfhuangxing(删除子模块文件)gitrm--cachedhuangxing(删除暂存区中的子模块)gitcommit -m删除submodule子模块(提交)gitpush(提交到远程服务器上)- substree子模块(双向、简单)父文件中添加子模块需要3步:gitremoteaddsubtree-origin gitgithub.com:nihao/subtree.git(subtree-origin为链接名)gitsubtreeadd-Phuang_substree subtree-origin master(huang_substree 子模块名)gitpush(将新添加的子模块推送到云端)父文件中的子模块修改并提交父文件的远端cdhuang_substreevihello.txtgitcommit -am修改gitpush 或者退回到父文件中再push也是可以的父文件中的子模块修改并提交到子模块的远端gitsubtree push-Phuang_substree subtree-origin master父文件的子模块拉取子模块的父内容最新数据gitsubtree pull --prefix同-P huang_substree subtree-origin mastergit cherry-pick的应用gitcheckout master(先切回主分支)gitcherry-pick 22976cd5(拼接sha1的值只能一个一个来不可跨节点操作)gitcheckout22976切换到创建分支前的主分支gitbranch-Dtest把不用的子分支删掉gitcheckout-btest再重新建一个子分支变基gitrebase master(从本分支变基到master分支上)gitcheckout master(切回到主分支)gitmergetest(合并test分支的修改)变基冲突解决方式一vitest.txtgitadd.gitrebase--continue(继续执行变基)gitcheckout master(切回到主分支)gitmergetest(合并test分支的修改)方式二gitrebase--abort冲突合并时回到冲突前的状态 方式三gitrebase--skip(则会将引起冲突的commits丢弃掉)git 图形化工具gitk如果我的内容对你有帮助请点赞评论收藏。创作不易大家的支持就是我坚持下去的动力