资料推荐:
推荐万门大学吴海洋老师的课程,讲得非常清楚,本博客内容基本为该课程的内容整理。
同时推荐廖雪峰老师的git教程,两个互相补充着学习,git使用基本无障碍了。
极客时间苏玲老师的《玩转git三剑客》讲得内容更多一些,但个人感觉过于细碎,章节安排不成体系,小白直接看抓不住重点,可以作为补充知识来看。
一、环境配置
git配置
// 配置用户名和邮箱
git config --global user.name "yourname"
git config --global user.email "your@email"
//查看配置文件
git config --list
//查看某项配置
git config user.name
//查看帮助
git help
git help 具体命令 //查看详细说明
git初始化
// 初始化
git init
//创建文件夹并初始化
git init 文件名
//查看文件夹下的全部文件
ls -la 文件名
git追踪
//查看git状态
git status
//将文件添加到暂存区
git add 文件名
//添加所有文件
git add .
git撤销追踪
//将文件从暂存区撤回,取消追踪
git rm --cached 文件名(可写多个文件名)
git提交本地仓库
//commit之后即生成版本号进行保存
git commit
git commit -m 提交信息
//同时做add和commit,但只对已经追踪的文件生效
git commit -am
二、版本追踪
git的log追踪
//命令参数可以组合使用
git log
//查看最近两次提交内容的差异
git log -p -2
git log --author=""
//查看分支图
git log --graph
git log --pretty=oneline //打印的信息是完整的
//定制打印格式,%h表示哈希值,%an表示作者,%ar表示时间,%s表示描述。
git log --pretty=format:"%h - %an, %ar : %s"
git追踪文件修改前后的区别
//git commit之前检查当前版本是否有问题,若无问题则可以直接am提交
git diff //可以指定文件名,默认是展示所有文件的变化
//如果文件已经add到暂存区了,则不能用git diff 直接查看区别,需要加staged参数。
git diff --staged
git文件删除、重命名和移动
//删除,可以删除原文件再add,相当于git删除
git rm filename
//重命名
git mv oldname newname
//移动,移动本质上是删除旧的,新建新的
git mv filename 路径/文件名
git文件忽略
//在.gitignore中添加需要忽略的文件名
//忽略node_modules文件下下的所有文件
//忽略不同的文件需要换行
/node_modules
//忽略.log结尾的文件
*.log
//删除已经被追踪的文件追踪
//空文件夹不会被发现提示未追踪,空文件会被提示未追踪
//把缓存区所有的文件提出来,在.gitignore中添加需要忽略的文件,再add-commit-push。
git rm -r --cached .
三、复原变更
git一键还原
//本地修改,尚未add
//放弃本地的修改
git checkout -- filename
//新建的文件,还未被追踪,无法用checkout还原,可以直接删除
rm -rf filename
git撤销追踪与一键还原
//已经添加到缓存区的文件
//reset到本文件的上一次操作
git reset HEAD filename
//回到未add的状态,放弃本地修改,回到上一次的状态
git checkout --filename
git版本回退
//强制回退
git reset --hard HEAD^ //回退到上一个版本
git reset --hard HEAD^^ //回退到上上个版本
git reset --hard HEAD的hash号 //回退到指定hash版本
git reflog // 查看指针的变化情况
git回到旧版本
版本回退:删掉了未来版本,无法回到未来
回到旧版本:将过去的某个版本拉取到现在,保留了已有的所有版本
//
git log
git checkout hash号 -- filename
git checkout hash号 -- . //把所有文件都恢复到以前的版本,再commit一下
四、分支合并
当前分支有内容未处理时不要切换分支,会导致其他分支内容也发生改变。
在当前分支working tree clean的状态下再切换分支
git新建切换删除分支
git branch //查看分支
git branch name //新建分支
git checkout branch_name //切换分支
git checkout -b branch_name //新建并切换分支
git branch -d name //删除分支,需要先切换到其他分支下
git branch -D name //强制删除分支,未合并的分支不能用-d删除,可以用-D强制删除
//误删某个分支后,只要有该分支的hash号就可找回
git branch 分支名 hash号
git合并分支
先切换到主分支下,再git merge需要合并的分支
git merge branch_name
git merge --no-ff --no-commit branch_name //合并后不提交,测试没问题后再提交,--no-ff不用快转模式,可以看到所有的版本
git merge --no-ff --squash branch_name //--no-ff和--squash不能同时使用
git merge --squash branch_name //压缩分支,压缩之后要commit
git reset --hard ORIG_HEAD //回到最开始的版本
git解决冲突
git merge --abort //放弃合并
<<<<<<<表示现在的分支
=======表示分隔
>>>>>>>表示要被合并的分支
git通过命令查看版本线图
git log
git log --oneline
git log --oneline --graph
git log --oneline --graph --all //查看所有分支的
git log --oneline --graph -number //查看最近的几个版本线图
git快转机制
上一个版本和本版本相同时,没必要保留保留两个相同的版本,使用快转机制直接抹除上一个版本
git merge branch_name --no-ff //不使用快转机制
git一次性删除所有不想要的分支
git branch --merged //显示所有已经合并的内容
git branch --no-merged //显示所有未合并的内容
git branch --merged | egrep -v "(^\*|master|develop)"|xargs git branch -d //括号里的是要保留的分支
git branch --no-merged | egrep -v "(^\*|master|develop)"|xargs git branch -D //括号里的是要保留的分支,删除未合并的分支要用大写D
五、github使用
git本地仓库推送到远端仓库
git init //生成本地仓库
git add .
git commit -m "message"
git remote add origin 远端网址 //设置好以后用origin替代远端网址
git push --set-upstream origin master //首次提交需进行连接
git push -u origin master //上一句命令的简写
git主仓库做服务器
1、项目名为owner_name.github.io
2、解除原有的连接
git remote remove origin
3、建立新连接
git remote add origin 远端网址
git获取远端项目
不要下载了zip文件后再使用git init,会导致分支信息全部丢失。
git clone 远端仓库地址 项目名(可选)//克隆远端仓库,并自动checkout到 master
//添加项目名参数可以重命名项目
git clone --no-checkout //克隆,但不自动checkou到 master
git clone --bare 远端仓库地址 //克隆一个裸仓库,只有.git文件
如果需要获取代码,则再进行以下操作
git clone 裸仓库地址 项目名
六、git多人协同开发
git push
git push
git push -u origin
git push --set-upstream origin branch_name //第一次上传要对应远端分支,之后可以直接使用git push
git push --all //所有分支一次性上传
git branch -a //可以查看远端追踪分支
git pull
git pull = git fetch + git merge //上班先git pull
git fetech
git merge
gitr pull 拉取本地没有的远端分支后,本地只有该分支的远端追踪分支,但没有该分支,
此时不可以checkout到远端追踪分支,会产生分离头指针。如果想checkout可以直接
git checkout 对应的远端分支名,本地会自动创建。
git 删除远端分支,仓库迁移
git push origin --delete branch_name //删除远端分支和远端追踪分支
git remote set-url origin 远端仓库新地址 //仓库迁移,设置好新地址后,git push --all即可。
git 演示
developer A 创建仓库并上传
git init //初始化本地仓库
code .gitignore //使用vs code打开.gitignore文件
git add .
git commit -m 'first commit'
git remote add origin 远端仓库名
git push -u origin master
developer B 拉取项目并开发
git clone --bare 远端仓库地址
git clone --no-checkout 裸仓库地址 项目名
rm -rf 裸仓库
git checkout master
git checkout -b developB //创建自己的分支并开发
code .
git add .
git commit -m 'developB'
git checkout master
git merge --no-ff developB
git log --oneline --graph
git remote set-url 远端仓库地址
git remote -v
git push --all
developer A 进行开发
git pull
git checkout -b developA
code .
git add .
git commit -m 'developA'
git checkout master
git merge developA
git push //只push了master,如果需要push其他的,那么可以git push --all或者切换到其他分支,git push origin developA
七、git服务器部署
git 使用ssh连接github
cd ~ //切换到默认文件夹
ls -la
ssh-keygen //生成公钥私钥
cat id_rsa.pub //打开公钥,把公钥放到服务器上
ssh git@github.com //连接github服务器
git 自动部署到阿里云服务器
1、将项目提交到github
2、使用github的actions进行自动部署,根据语言和功能选择CI,Deploy with rsync插件实现自动部署到服务器的功能。参数在settings--secrets里添加。
3、生成公钥和私钥
ssh-keygen -t rsa -C auto -f deployment
//自定义生成,添加描述,给定项目名字,最终生成了deployment和deployment.pub
把私钥添加在github的secrets的变量里
把私钥添加在本地的ssh文件夹里
cd .ssh/
cp ~/deployment .
把公钥添加在远程服务器的默认文件夹上
scp deployment.pub 用户名@公网ip:.
4、连接远程服务器
ssh root@公网ip地址 //本地连接服务器
将公钥写入到.ssh文件夹的authorized_keys文件中
按dd删除原内容
cat deployment.pub >> ~/.ssh/authorized_keys
5、发起自动部署
回到github,点击start commit。
八、gitlab使用
gitlab
私有仓库免费,操作与github相同
fork使用
用于多开发者之间的协同,或者项目新功能的增加与测试
fork到自己的仓库中进行修改
然后发起merge request
CI和CD
Continuous Intergration //单元测试
Continuous Delivery //
Continuous Deployment //
持续集成、持续交付、持续集成
gitlab runner
安装教程按照官网进行
gitlab-runner --version //查看是否安装成功
gitlab CI/CD
创建 .gitlab-ci.yml
运行CI/CD Pipelines