Git
Git是目前世界上最先进的分布式版本控制系统
Git作用
- 版本控制
- 协同开发
Git结构
整个结构可以分为:
- 工作区用户在IDE或者本地目录中对文件进行添加、修改、删除操作
- git add 文件或目录
- git rm 文件
- git checkout 文件
- 缓冲区表示个人开发的一个小阶段的完成仓库区中记录的各版本是可以查看并回退的但是在暂存区的版本一旦提交就再也没有了
- git commit -m “备注”
- git reset HEAD或版本号
- 本地仓库将用户分支上存储每天的工作代码
- git push origin 分支 推送到远程仓库
- git checkout dev
- git pull
安装Git
sudo apt-get install git
安装成功查看命令git
本地操作
创建本地仓库
git init
会创建.git目录
配置用户信息
用户名
git config user.name yczbest
邮箱
git config user.email Rabbit@yczbest.cn
密码保存时间
记住密码(默认15分钟)
git config –global credential.helper cache
自定义记住时间(1小时)
git config credential.helper ‘cache –timeout~3600’
长期保存密码
git config –global credential.helper store
查看本地文件状态
git status
添加文件到本地暂存区(跟踪文件)
添加单个文件
git add 文件名
添加所有文件
git add .
提交到本地仓库
从暂存区上传到本地仓库git commit -m “注释”
查看日志
查看指针日志
可以查看到HEAD指针及其之前的版本信息git log
查看可参考的所有日志
可查看到所有历史版本信息。由于查看所有历史版本信息的目的,大多是为了进行版本回退或恢复操作所使用,从中找到所需的commit索引git reflog
版本回退
回退到上一版本
git reset –hard HEAD^
HEAD
表示当前最新版本HEAD^
表示当前最新版本的前一个版本HEAD^^
表示当前最新版本的前两个版本,以此类推…HEAD~1
表示当前最新版本的前一个版本HEAD~10
表示当前最新版本的前10个版本,以此类推..
回退指定版本
git reset –hard 版本号
恢复暂存区文件到工作区
将文件从暂存区拉取到工作区,撤销当前的修改git checkout 文件名
撤销暂存区代码
git reset HEAD 文件名
添加本地仓库并提交
git commit -am “注释”
远程仓库操作
从远程仓库下载代码
git clone URL
上传代码到远程仓库
git push
从远程仓库拉取更新
git pull
多人协作开发流程
程序员A
克隆项目到本地
git clone url
进行开发
touch a.py
提交并推送
git commit -am “程序员A推送”
git push
程序员B
克隆项目到本地
git clone url
拉取修改
因为程序员A开发了,所以拉取更新
git pull
进行二次开发
vim a.py
提交并推送
git add .
git commit -m “程序员B二次开发”
git push
冲突
出现原因
当两个人同时对同一仓库、同一分支的同一文件进行修改时。
A修改后,B可能没有拉取更新内容,就进行了开发,当上传时,会发生冲突。
这个时候会发生冲突
解决方法
谁发生冲突谁解决
先拉取最新的内容,再进行修改
最后提交并推送至仓库
容易冲突的操作方式
- 多个不同时操作了同一个文件
- 一个人一直写不提交
- 修改之前不更新最新代码
- 提交之前不更新最新代码
- 擅自修改同事代码
减少冲突的操作方式
- 养成良好的操作习惯,先pull在修改,修改完立即commit 和push
- 一定要确保自己正在修改的文件是最新版本的
- 各自开发各自的模块
- 如果要修改公共文件一定要先确认有没有人正在修改
- 下班前一定要提交代码,上班第一件事拉取最新代码
- 一定不要擅自修改同事的代码
Tag标签
一个大版本创建一个tag,可以解决项目日志太多不方便回退的问题
创建标签
git tag -a v1.0 -m “第一版”
创建标签在本地仓库,远程仓库中看不到
查看所有标签
git tag
推送指定标签版本到远程仓库
git push origin v1.0
删除标签
在本地仓库删除标签git tag -d v1.0
远程删除标签
git push –delete origin v1.0
分支
查看本地所有分支
git branch
默认只有一个master分支或者main分支
创建并切换本地分支
不存在的分支会自动创建git checkout -b login
在一个分支下写的代码,需要提交,再切换分支,这样不同的分支会有不同的代码文件
切换本地分支
git checkout 分支名
合并分支到主分支
git merge 分支名
删除本地分支
git branch -D 分支名
设置上游分支
当目前分支不是主分支(main)
,且没有上游分支时(远程服务器没有当前分支)会导致推送失败。
此时需要设置上游分支,将本地分支和远程分支对应起来
git push --set-upstream origin dev
或者
git push -u origin dev
git push origin 本地分支名:远程分支名
执行第二条后,如果远程分支不存在,会自动创建
SSH
生成公钥
ssh-keygen -t rsa -C ‘Rabbit@yczbest.cn’
添加公钥到本地
关闭SSL验证
git config –global http.sslVerify “false”
推送本地文件至远程仓库分支
将远程指定分支 拉取到 本地指定分支上:git pull origin <远程分支名>:<本地分支名>
git push 命令用于从将本地的分支版本上传到远程并合并。
命令格式如下:git push <远程主机名> <本地分支名>:<远程分支名>
如果本地分支名与远程分支名相同,则可以省略冒号:git push <远程主机名> <本地分支名>
.gitignore不生效的解决方法
原因是因为在git忽略目录中,新建的文件在git中会有缓存,如果某些文件已经被纳入了版本管理中,就算是在.gitignore中已经声明了忽略路径也是不起作用的,
这时候我们就应该先把本地缓存删除,然后再进行git的提交,这样就不会出现忽略的文件了。
解决方法: git清除本地缓存(改变成未track状态),然后再提交:
– 我直接重新来了。搞定[root@kevin ~]# git rm -r –cached .
[root@kevin ~]# git add .
[root@kevin ~]# git commit -m ‘update .gitignore’
[root@kevin ~]# git push -u origin master
git pull或clone出现fatal: refusing to merge unrelated histories
原因是两个分支是两个不同的版本,具有不同的提交历史git pull origin master –allow-unrelated-histories
可以允许不相关历史提,强制合并,
其他
创建本地dev分支,并指向dev分支
git checkout -b
本地分支关联远程分支
git branch --set-upstream-to=origin/<远程分支> <本地分支>