目录
一、概述
1.1、Git工作一览图
1.2、Git滴历史背景
- linux开发需要许多人协同,早前人们使用的是别人授权的版本控制系统BitKeeper,后来免费使用许可停止授权,Linux开发者Linus Torvalds自己开发了git。
1.3、Git可以干嘛呢
- 用于完整记录项目代码变化:时间、人物、地点、‘经过’、‘结果’
- 用于备份每一次的变化的代码版本:便于查询历史记录、复原变更、差异比较
- 多人协作:分支合并、克隆提交
1.4、Git与SVN对比
- SVN:C/S结构【集中式】【从*服务器拿代码->自己开发后上传】
- *服务器崩溃就全崩溃
- 容错性差
- Git:【分布式】版本控制
- 本地仓库:commit提交到本地仓库
- 远程仓库:push本地到远程服务器仓库
pull拉取到本地仓库;Clone克隆将远程仓库直接复制到本地
1.5、常见代码托管服务
- GitHub、码云、GitLab
二、环境搭建
2.1、windows环境:
目前可以使用gitbash工具,点击这,进gitbash官网下载对应版本(如:64位)
2.2、Mac环境
- 直接安装xcode工具就自带gitbash;
- 通过brew安装;
/**
* Homebrew安装方式:默认在该路径/usr/local/Cellar/git/
* 无Homebrew时,先安装Homebrew,有则跳过
*/
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
// 有brew时,通过命令安装git
brew install git
2.3、查看Git版本信息
// 命令中查看版本信息:
git --version
三、Git常用命令
3.1、环境配置
3.1.1、默认五大行
以下代码中:weiranyi需替换自己的用户名,@qq.com需替换为自己的邮箱
git config --global user.name weiranyi
git config --global user.email @qq.com
git config --global push.default simple
git config --global core.quotepath false
git config --global core.autocrlf input
3.1.2、可选配置
// 1.使用git commit的时候会弹出vs code编辑器,前提是安装了该软件并配置了环境
git config --global core.editor “code --wait”
// 2.设置和取消git代理:
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy https://127.0.0.1:7890
git config --global --unset http.proxy
git config --global --unset https.proxy
3.1.3、检查配置
// 配置完就可以使用该命令查询
git config --global --list
3.2、获取Git仓库
3.2.1、本地初始化
git init
3.2.2、远程克隆
git clone https://github.com/weiranyi/Project-Crawler-Elasticsearch.git
3.3、工作区/暂存区/版本库
3.3.1、流程图一览
3.3.2、名词解释
- 版本库:.git隐藏目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除等操作Git都能跟踪到,有配置、日志、文件版本等信息
- 暂存区(stage):.git隐藏目录里index文件(二进制文件)就是暂存区,暂时存放修改的文件
- 工作目录:包含.git目录,主要存放开发代码
3.4、工作目录中文件的两种状态
3.4.1、工作目录中文件的两种状态
- a.未追踪状态 /Untracked files
- b.追踪状态 /tracked
- i.未修改/unmodified
- j.已修改/Modified
- k.已暂存/Staged
3.4.2、查看命令
// 查看文件状态
git status
// 简洁版
git status -s
3.5、本地仓库操作
3.5.1、将文件加入或取出暂存区
git add index.html //【加入】对单个文件,如:index.html增加标记
git reset index.html //【取出】这个是取消的方式
git status //查看标记状态
git add . // 对所有文件添加标记
3.5.2、将暂存区文件修改提交
// 将已经被标记的文件提交到仓库,版本1是描述内容
git commit -m "版本1"
/** 不加-m时
* 输入命令并回车后,进入一个编辑界面
* 编辑:输入i(英文字母),可进入插入模式
* 保存并推出:按esc,再输入wq保存并退出
*/
git commit
3.5.3、删除文件
// 工作区的文件删除操作会默认放入暂存区,注:手动右键删除需要add一下
git rm 删除文件名
// 只需提交一下
git commit -m "从仓库删除"
3.5.4、将文件添加到忽略列表
// 1、第一步:通过.gitignore 设置不需要标记的文件
vi .gitignore // 输入英文状态i键进行编辑
// 3、第二步:在.gitignore中添加忽略滴内容
target/
.idea/
// 按esc,输入:wq保存退出
3.5.5、查看日志记录
git log
3.6、远程仓库操作
3.6.1、一览图
3.6.2、查看远程仓库
// 会列出远程服务器的简写,克隆会显示origin
git remote
// 显示出远程的地址
git remote -v
// 更加详细的信息
git remote show origin
3.6.3、添加远程仓库
// 添加一个远程仓库地址
git remote add<shortname><url>
git remote add origin https://***/***/***.git
3.6.4、克隆远程仓库
// 不仅仅是文件,历史和日志信息会一起下载下来
git clone [url]
3.6.5、移除远程仓库
移除无效的远程仓库【移除本地的远程仓库记录,不会移除远程】
git remote rm myhomework
3.6.6、抓取/拉取远程仓库
// (1)、git fetch
// git fetch:不会自动合并数据【抓取到本地,但没有合并到工作区,在隐藏库的object中以二进制存放】
git fetch
// 手动合并:以下命令执行后文件就已经到工作区啦
git merge origin/master
// (2)、git pull
//git pull:抓取远程最新数据同时自动进行合并(merge)
// 本地 远程
git pull origin master
3.6.7、推送远程仓库
git push origin master
3.7、分支
3.7.1、查看分支
// 列出本地分支
git branch
// 列出所有仓库分支
git branch -r
// 列出远程和本地滴
git branch -a
3.7.2、创建分支
// 创建本地分支
git branch bit1
3.7.3、切换分支
// 切换分支
git checkout bit1
3.7.4、推送到远程仓库分支
git push origin bit1
3.7.5、合并分支
// 将分支bit1的内容合并到main分支,切换分支为main
git checkout main
// 在master下进行以下操作
git merge bit1
3.7.6、删除分支
// 删除本地分支,不会删除远程分支
git branch -d bit2
// 删除远程分支
git push origin -d b2
3.8、标签
3.8.1、列出已有的标签
// 列出已经有滴标签tag
git tag
// 查看tag信息
git show [tag]
3.8.2、创建新标签
// git tag[tagName]
git tag v0.1
// 查看
git show v0.1
3.8.3、将标签推送到远程仓库
git push origin tag v0.1
3.8.4、检出标签
// 新建一个分支,指向某个tag
git checkout -b [branch][tag]
git checkout -b bit2 v1.0
// 打标签tag2.0
git tag v2.0
// 推送远程
git push origin v2.0
3.8.5、删除标签
// 删除本地标签tag
git tag -d[tag]
git tag -d v0.1
// 删除远程tag
git push origin :refs/tags/[tag]
git push origin :refs/tags/v0.1
四、Git 的rebase与merge
4.1、相同点
都可以对代码进行合并操作
4.2、不同点
4.2.1、merge与rebase图解
下图:在某分支执行git merge/rebase master
4.2.2、merge
- 将分支开始的所有commit合并在一起,并将这个合并的commit和main进行比较
- 不修改原有commit内容,所有冲突用一个新commit来描述
4.2.3、rebase
- 线性的历史结构
- 每一个Commit都要处理自己的导致的冲突,所以每一个Commit内容其实都已经改变了
4.3、小结
- 不要在共享分支上使用rebase
- 本地和远端对应同一条分支,优先使用rebase,而不是merge
五、GitHub 实战
5.1、进入GitHub,创建仓库
5.2、设置GitHub仓库信息
按需对仓库进行设置,完成后点击创建
5.3、本地获取远程仓库
5.3.1、配置免密登录
- a、本地生成ssh 密钥
// windows在GitBash操作,MAC进入终端就行
// 进入home目录
cd ~
// weiranyi@github.com换你的邮箱(后面建议一路回车,不要输密码)
ssh-keygen -t rsa -b 4096 -C "weiranyi@github.com"
// 进入.ssh目录
cd .ssh
// 查看文件ls,.pub结尾代表公钥匙(id_rsa,id_rsa.pub)
ls
id_rsa id_rsa.pub known_hosts
// 输出公钥内容,将命令行反馈一大串内容复制
cat id_rsa.pub
- b、GitHub配置ssh 密钥
- i、登录 GitHub,点击用户头像→
Settings
→SSHandGPG keys
→NEW SSH keys
- 将a步骤中cat命令输出的内容复制到key框框,title随意
- i、登录 GitHub,点击用户头像→
至此:a、b步骤操作完成后,ssh也就配置好啦
5.3.2、通过SSH方式获取
-
含Quick setup的初始仓库
-
常见通过SSH获取自己的仓库,code按钮,复制SSH连接
-
常见通过https获取自己和他人的仓库:code按钮,复制https链接
5.3.2、克隆远程仓库
// git clone https链接(SSH获取自己的仓库时,推荐!!!)
git clone git@github.com:weiranyi/test.git
// 克隆他人仓库使用git clone https链接
git clone https://github.com/weiranyi/test.git
5.3.3、将本地内容提交到本地仓库
cd test
echo "# test" >> README.md
git add README.md
git commit -m "添加README文件"
5.3.4、将本地仓库内容提交远程仓库
git branch -M main
git push -u origin main