Git
版本控制工具,对文件或内容做版本控制
记录文件在不同的时间点的状态,追踪到文件在不同的时间点下的不同状态。
可以协作的、也可以公开、可以追踪历史网盘 → 协作开发
GitHub 996icu
Linus → Linux、Git、git的命令行里可以使用linux的一些命令
分布式版本控制工具(Git)、集中式版本控制工具(SVN)
离线可用
Git的操作流程
pull:本地仓库落后于远程仓库,可以通过pull拉取远程仓库更(四声)新的这部分
push:本地仓库领先于远程,可以通过push推送给远程领先的这部分内容
工作区:是看得见摸得着的地方,开发的位置
add:将工作区的变化(指定文件)提交到暂存区
commit:将暂存区所有的变化都提交到本地仓库,产生版本信息
Git的安装
next → finish
使用Git
创建远程仓库
注册账号:记住用户名和密码
clone 获得本地仓库
git clone 仓库地址 → 克隆到当前位置
git clone 仓库地址 文件夹 → 克隆到指定文件夹
我们通常会使用一个这样的命令 git clone 仓库地址 **. ** → clone到当前文件夹
注意:
- .git文件夹是一个隐藏文件夹,不要直接操作;
- .git文件夹所处的目录就是工作区的根目录;也可以工作蓝色文字来区别
- 工作区产生的变化都会被git识别
status 查看状态
git status
查看工作区和暂存区的状态,查看变化在工作区,还是已经提交到暂存区了
查看文字颜色:红色工作区,绿色暂存区
![外链图片转
add 工作区提交到暂存区
git add 文件名
git add *.java 提交某个类型的文件中产生的变化
git add src/* 提交某个目录下的文件中产生的变化
git add . 提交当前目录下所有的变化(谨慎操作),使用之前先git status
commit 提交到本地仓库
会产生版本信息,版本信息里包含本地的用户信息
第一次提交之前要先设置本地的用户信息
用户信息设置
直接修改配置文件
c:/Users/当前用户/.gitconfig (ini格式)
如果你没有这个文件可以新增一个,如果是windows,不允许创建没有名字的文件
如果window不允许创建,你可以打开git的bash → touch .gitconfig
[user] email = shitoushaoxia1993@gmail.com name = shitoushaoxia [credential] helper = store
使用命令修改 → 修改配置文件
git config --global user.name 值
git config --global user.email 值
git config --global credential.helper store 保存用户名密码的
执行提交
git commit -m “提交消息”
mg%2Fimage-20220105151758530.png&pos_id=img-L1P0fG6N-1706540292676)
提交消息:建议小组统一 一个格式 (具体格式都可以)
注意:commit的时候已经产生了版本信息,4492a54是版本号,版本号是唯一,当前仓库使用前7位就够了
push 本地仓库推送远程仓库
领先于远程仓库
git push
第一次push的时候需要输入码云的用户名和密码,输入git push时会弹出对话框
pull 拉取变化
落后于远程仓库
git pull
协作开发
加入仓库
加入到仓库中就可以push了
如果你的仓库是私有的,也能够看到你这个仓库
处理冲突
先提交的不处理冲突
后提交的处理冲突
开发习惯:晚上走之前建议提交一下(提交的时候保证你的程序能够编译)
log 查看本地仓库日志
git log
过程1
结合上面的流程图看
过程2
repo1先执行了push
!
过程3
repo2执行pull
发现产生冲突了
过程4
修改冲突,并且重新提交
aster%2Fimg%2Fimage-20220106102329470.png&pos_id=img-7JwqTr8x-1706540292680)
过程5
repo2执行提交,提交最早想提交的部分和处理冲突的部分
!
过程6
repo1执行pull
没有冲突
Auto Merge
自动合并会让你提供合并信息(啥都不写都行) → 弹出vim编辑器
退出vim编辑器
- esc
- 冒号 wq
- 回车
忽略管理
你在工作产生了新的内容(变化 → 新增),git就会追踪这个变化
untracked files 还没有追踪
这个文件产生的变化我们不想给提交上去,我们可以做忽略管理
.gitignore → 要放在工作区的根目录
格式
文件名 单个文件
文件夹 某个文件夹下的文件
文件夹/
*.类型 某个类型的文件
注意事项:当前版本已经管理的文件,不能做忽略管理;只有去除掉才可以忽略管理(commit)
可以忽略自己(.gitignore),但是不建议大家忽略自己
newfile.txt 忽略单个文件
directory 忽略目录
runlist.txt
*.class 忽略了class文件
后悔药
![外
checkout 工作区里内容的撤销
git checkout 文件名
撤销完之后,内容还能找回吗? 不能 → 谨慎操作
reset 暂存区撤回到工作区
git reset
刚刚在工作区中新增了“松哥牛皮”
提交到暂存区之后,又使用reset给撤回到工作区,“松哥牛皮”还在不在 → 在,变化仍然存在
reset --hard 本地仓库的版本回退
git reset --hard 版本号
版本号可以写前七位,也可以写完整的
注意回退的是本地仓库,指回退当前的本地仓库,对远程仓库和其他本地仓库没有影响
!
如果想要回到最新的状态
可以使用pull命令
分支branch
git branch -a 查看分支
括号里的蓝色文字:指的是当前分支名,也意味着你处于工作区中
创建分支
创建远程仓库的分支
创建本地仓库的分支
起点是当前分支
git checkout -b 分支名 创建分支并切换到这个分支上
git checkout 分支名 创建分支并切换到这个分支上;切换分支
建立本地仓库的分支和远程仓库分支之间的联系
设置分支之间的联系
执行一次完整的提交
分支的合并
比如我们现在要将dev分支上的变化提交到master分支上 → 在master上合并dev
切换到master分支上
分支合并 git merge dev
推送远程 git push
如果要将分支A里的合并到分支B里 → 在B上合并A
1706540292682)]
设置分支之间的联系
[外链图片转存中…(img-1Klpl4tK-1706540292683)]
执行一次完整的提交
[外链图片转存中…(img-tjV0FsNm-1706540292683)]
[外链图片转存中…(img-9ZANon49-1706540292683)]
分支的合并
比如我们现在要将dev分支上的变化提交到master分支上 → 在master上合并dev
切换到master分支上
分支合并 git merge dev
推送远程 git push
[外链图片转存中…(img-pw2LMxaQ-1706540292683)]
如果要将分支A里的合并到分支B里 → 在B上合并A