Git使用指南 文章目录一、Git介绍1. 什么是Git2.Git对比SVN3.Git安装二.Git常用命令1. git config2. 初始化本地库3. 工作区、暂存区和版本库4. git add5. git commit6. git reset 与 git revertgit resetgit revert三. Git 分支1.初识分支2.创建分支3.切换分支4.合并分支5.删除分支四.远程仓库1.创建远程仓库2.添加仓库地址3.git push4.git clone5.git pull五.VScode集成Git六. gitignore​一、Git介绍1. 什么是GitGit 是一个开源的分布式版本控制系统用于敏捷高效地处理任何或小或大的项目是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件版本控制版本控制Revision control是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史方便查看更改历史记录备份以便恢复以前的版本的软件工程技术团队协作从单兵作战转换为团队开发2.Git对比SVNSVN是集中式版本控制系统版本库是集中放在中央服务器的而工作的时候用的都是自己的电脑所以首先要从中央服务器得到最新的版本然后工作完成工作后需要把自己的代码推送到中央服务器集中式版本控制系统是必须联网才能工作Git是分布式版本控制系统没有中央服务器每个人的电脑就是一个完整的版本库工作的时候不需要联网因为版本都在自己电脑上可以离线工作3.Git安装git官网下载打开cmd窗口输入指令检查是否安装成功git--version二.Git常用命令1. git configGit 中有三层 config 文件分别为系统、全局、本地对于同一配置项优先级为本地 全局 系统每层配置都会覆盖掉上一层的配置查看不同级别配置文件# 查看系统config \Git\mingw64\etc\gitconfig包含适用于系统所有用户和所有项目的值gitconfig--system--list# 查看当前用户global配置 C:\Users\Administrator.gitconfiggitconfig--global--list# 查看当前仓库配置信息 git项目目录中的.git/config适用于当前项目gitconfig--local--list设置用户标识以区分不同的开发人员可以和远程不同# 设置全局配置 --globalgitconfig--globaluser.emailyouexample.comgitconfig--globaluser.nameYour Name# 设置本地用户标识gitconfig user.emailyouexample.comgitconfig user.nameYour Name# 删除配置项gitconfig[--local|--global|--system]--unsetsection.key# 查看当前配置gitconfig--list# 查看某个配置项gitconfig user.name2. 初始化本地库cd hello/是进入文件夹cd ..是返回上一级文件夹ls显示当前文件夹下的普通文件ls -a显示所有gitinit初始化后文件夹内会多一个.git的文件夹这个文件夹是一个隐藏文件夹3. 工作区、暂存区和版本库工作区当前目录下的所有文件.git不属于工作区版本库.git这个目录是本地版本库本地仓库分为暂存区和main托管平台局域网(内网)gitlab公网外网gitlab、github、gitee 码云将工作区的代码提交至暂存区stage确定没有问题后提交到主分支 main 即历史区这时才会生成提交记录如果需要再次提交可以将之前 main 中的提交撤回到暂存区在暂存区中一次性提交至 main 中总共生成一次记录避免记录混乱最后推送远程仓库4. git add使用git add指令将代码提交至暂存区# 把文件夹下的单独文件 index.txt 放在暂存区gitaddindex.txt# 把文件夹下的单独一个文件夹 assets 放在暂存区gitaddassets/# 把文件夹下所有的内容都放在暂存区gitadd--all# git add --all 简单的写法gitadd.# 查看文件状态绿色的表示在暂存区红色的表示只在工作区gitstatus# 查看文件内容catindex.txt# 删除暂存区的文件gitrm--cachedindex.txt5. git commit使用git commit指令将暂存区的内容提交至历史区版本库# 将暂存区的内容放到历史区版本库不加-m会进入vim模式按i切换到insert模式写注释不要在#后面写另起一行然后按esc键按wq退出gitcommit-mmessage# 跳过 git add, 将所有已被跟踪的文件更改提交到版本库gitcommit-ammessage# 使用一次新的commit, 替代上一次提交如果代码没有任何新变化, 则用来改写上一次commit的提交信息gitcommit--amend-mmessage使用git log指令查看版本信息# 查看当前历史区版本信息显示最顶端指针及以下的记录gitlog# 查看本地库所有的操作记录gitreflog6. git reset 与 git revertgit reset使用git reset 版本编号进行历史回退回滚到对应的commit-id共有如下三种命令方式--mixed默认可以不带该参数回滚到所有git add和git commit命令执行之前暂存区清空全部到工作区--soft工作区不变暂存区 原来的 回滚后和回滚前的版本差异--hard撤销工作区中所有未提交的修改内容将所有工作区和暂存区的文件修改全部清空覆盖不能找回# 回退到上一次提交的版本gitreset--hardHEAD^# 回退到上上次提交的版本 hard 之前从历史区回退到工作区gitreset--hardHEAD^^gitreset--hardHEAD~2gitreset--hardreflog中显示的回退前那一次的地址或者前面的6个字母# soft从历史区回退到暂存区比如注释写的不够详细可以回退到暂存区再写一下再推到历史区或者修复了一个bug把前面那个版本退回将新代码推到暂存区再一起推到历史区gitreset--softHEAD^head指针表示当前指向的位置head-main每提交一次会向前一次想回退版本让指针向回移动一次回退后此时git push会报错因为本地库HEAD指向的版本比远程库要旧使用-f参数强制推送gitpush-fgit revert反做某一个版本撤销其中的commit-id并重新生成一个commit-id以达到撤销该版本的修改的目的本身不会对其他的提交commit-id产生影响例如想要修改版本二但不想影响版本三则可用git revert修改版本二并生成新的版本四不影响版本三也就是说撤销某次操作此次操作之前和之后的 commit 和 history 都会保留并且把这次撤销作为一次最新的提交版本会递增且不影响之前提交的内容如果要推送到远程服务器使用git push即可# 撤销前一次 commitgitrevert HEAD# 撤销前前一次commitgitrevert HEAD^# 撤销某一次commit会让程序员修改注释如果想要使用默认注释添加 -n 或 --no-commit 参数gitrevert commit_id# 连续撤销多个commitgitrevert-ncommit_id_start..commit_id_end# 或者下述写法gitrevert-ncommit_id_1gitrevert-ncommit_id_3三. Git 分支1.初识分支git在初始化的时候会自动生成一个分支叫做main表示主要分支的意思可以自己开辟出很多独立分支每个功能是一个独立的分支2.创建分支使用git branch 分支名称指令开辟分支# 开辟一个 login 分支gitbranch login查看当前分支情况# 查看当前分支情况gitbranch前面有*号并且有高亮显示的表示当前所处的分支3.切换分支使用git checkout 分支名称或git switch 分支名称指令来切换分支建议使用switch命令checkout是一个很底层的命令可以完成很多事情在特定情况下使用会造成困扰# 切换到 login 分支gitcheckout logingitswitch login# 创建一个新分支并切换到该分支保留main中所有文件gitcheckout-blogingitswitch-clogin# 创建一个新分支并切换到该分支删除所有跟踪文件gitswitch--orphanlogin按照分支将所有功能开发完毕后只要把所有代码都合并到main主分支上就行了4.合并分支使用git merge进行分支合并将别的分支的内容合并到此时所处的分支上# 切换到 main 分支gitswitch main# 把 login 的内容合并到自己的分支gitmerge login当两个分支对同一个文件均进行过修改时合并后会产生冲突需要手动合并出现master|MERGING的时候这时打开文件把需要留的东西留下需要删的东西删掉然后重新add和commit就可以了合并后的还是只在main里面login里面还是他原来的子功能5.删除分支切换到别的分支使用git branch -d 分支名称指令删除分支# 先切换到别的分支gitswitch main# 删除 login 本地分支gitbranch-dlogin# 强制删除gitbranch-Dlogin# 有必要的情况下删除远程分支gitpush origin--deletelogin四.远程仓库1.创建远程仓库在远程代码托管平台 github 中创建一个新仓库2.添加仓库地址使用git remote add origin 仓库地址地址添加远程仓库# 添加仓库地址gitremoteaddorigin仓库地址# 删除仓库地址比如第一次后面的地址写错了gitremote remove originremote远程add添加origin一个变量名指代后面一长串的地址即指代这个仓库可以修改为别的名字3.git push使用git push指令将历史区中的所有内容推送到远程仓库中# 上传内容推送到 main 分支gitpush origin main# 如果当前分支与多个主机存在追踪关系使用 -u 参数指定一个默认主机后面可以不加参数使用 git pushgitpush-uorigin main第二次上传时因为有刚才的记录不需要再写origin和main会默认传递到origin这个地址的main分支上如果需要推送到其他分支需要加以说明# 第二次上传gitpush4.git clone使用git clone 仓库地址指令将远程仓库中的内容克隆一份到本地默认克隆main主分支可以克隆别人的公开的仓库也可以克隆自己的仓库# 克隆仓库主分支gitclone仓库地址# 克隆仓库主分支自行命名文件夹gitclone仓库地址自定义的文件夹名# 克隆远程指定分支gitclone-b分支名仓库地址5.git pull与远程仓库关联后如果代码有他人进行更新可以使用git pull获取最新代码# 拉取远程 main 最新代码到本地分支 main 并进行合并gitpull origin mastergitpull如果远程和本地都有修改再pull就会产生冲突和当前一样手动合并然后addcommitpush提交分支git push origin login再git pull origin login拉取不会和主分支合并对于bugfix分支应该是切到master分支然后merge合并然后把他删掉。如果已经将bugfix推上去了可以用git push origin :bugfix用空覆盖将远程的bugfix分支删除用fork把他人的项目整到自己的github上然后对这个项目修改clone……然后pull后点pull request如果作者批准并且merge就可以上到他的项目里五.VScode集成GitVSCode内置版本控制机制并自带对Git和Github的支持可以安装插件以支持其他控制软件如SVN等可以在其中进行可视化 git 管理六. gitignore在一些项目中我们不想让本地仓库中所有文件都上传到远程仓库中因为其中有一些测试文件、配置文件、依赖文件等内容太大并且我们只想展示源代码则可以写一个.gitignore文件将不需要推送的文件进行自动忽略git 忽略规则匹配语法空行不匹配任何文件可作为分隔符可用反斜杠转义如果本地仓库文件已被跟踪那么即使在 .gitignore 中设置了忽略也不起作用.gitignore 文件也会被上传的到远程仓库所以同一个仓库的人可以使用同一个.gitignore 文件对于一个项目可以在最上层设置.gitignore文件也可以在各个文件夹中设置所以有根目录和当前目录指令的区别# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.# dependencies# 开头的是注释# 忽略根目录下的 bin 文件/bin# 忽略当前路径下的 bin 文件夹bin/# 忽略当前路径下的.c文件不忽略子目录中的.c文件/*.c# 忽略 bin 文件夹下的.c文件不忽略子目录中.c文件bin/*.c# 忽略所有.log文件*.log# 忽略/bin, a/bin, a/b/bin等**/bin# 忽略a/b, a/x/b, a/x/y/b等a/**/b# 不忽略 bin 目录下的 run.sh 文件!/bin/run.sh# 忽略当前路径的 config.php 文件config.php