Git代码管理完整流程(没有废话)
Git学习
git 特点
特点:服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
windows凭据
git 工作区
git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。
局域网:GitLab
互联网:GitHub+Gitee
git常用命令
git config user.name #查看用户名
git config user.password # 查看密码
git config user.email #查看邮箱
git config --global user.password "新的密码"
设置成功可以通过查看gitconfig文件,一般在user文件夹里面
完整流程
首先在要进行操作的文件夹里面右键打开git bash
1、初始化本地库
git init
就是让git获得对这个文件夹的管理权限
如图,初始化本地库后会得到.git文件夹,这说明git已经掌握了对这个本地仓库的控制权(一般这个文件夹是隐藏的)千万不要修改这个文件夹
ll #查看
ll -a#查看隐藏文件
2、查看本地库状态
git status
vim hello.txt #创建一个文件
yy #复制
p #黏贴
:wq #保存并退出
cat hello.txt #查看hello.txt文件的内容
tail -n 1 hello.txt #查看文件末尾的第一行的内容是什么
Untracted files:hello.txt文件目前还在本地库,但是没有上传
3、添加到暂存区
git add hello.txt#添加到暂存区
git status
则git追踪到了这个hello.txt文件
#删掉暂存区的文件
git rm --cached hello.txt
#本地库里面还是有hello.txt文件
git status
4、添加到本地库(形成一个历史版本)
git commit -m "first commit" hello.txt #将hello.txt添加到本地库,其中 -m 就是让我们提交一个修改日志
git status
这个图片里面 02a8d9d是首次提交的版本号
git reflog #查看修改的版本信息
5、 修改文件
vim README.md
修改了本地库文件后,标红了,git 还不能追踪
git add README.md #添加到暂存区
git status #绿色显示已经提交到了暂存区
git commit -m "second commit" README.md #提交到本地库中
则显示了nothing to commit. working tree clean ,表示提交全部完成
git reflog #查看版本信息,发现多了一条版本号,且这个指针指向第二个版本
6、版本穿梭
git reflog #查看版本信息
git log #查看版本详细信息
!
git reset --hard 02a8d9d(版本控制号) #穿梭到版本控制号的版本
cat README.md #查看README 的修改情况
.git->refs->heads->master->里面是指向的版本号
7、GIT分支
分支:理解为单独的副本,底层是指针的调用
多个分支并行开发,互不影响
git branch -v #查看有几个分支
git branch hot-fix #创建一个紧急修复分支
git branch -v# 查看有几个分支
切换分支
git checkout hot-fix#切换分支到hot-fix
vim hello.txt #在hot-fix里面进行修改文件
git status
git add hello.txt
git commit -m "third commit" hello.txt #提交到本地库里面
git status
且.git 里面的HEAD文件开始指向hot-fix了
git reflog#查看版本日志
分支合并且是正常合并
git checkout main #切换到主分支
cat hello.txt #main分支里面的hello.txt并没有修改
把hot-fix分支合并到main分支:
#注意分支的时候先切回到main分支
git merge hot-fix #将hot-fix分支合并到main主分支上面去
合并后的结果
产生冲突:两个分支在同一个文件的同一个位置有两套完全不同的修改,Git无法决定使用哪一个,必须人为决定新代码的内容
vim hello.txt #修改hello.txt文件
git add hello.txt #加到暂存区去
git commit -m "main test" hello.txt
cat hello.txt
git checkout hot-fix #切换到hot-fix分支
vim hello.txt
git add hello.txt
git commit -m "hot-fix test" hello.txt
cat hello.txt
报了冲突,hello.txt里面出现了代码冲突
#此时需要我们手动打开代码
vim hello.txt
#其中HEAD 和一行等号之间是当前分支的代码,下面的是分支的代码把里面关于符号的全部删掉,保留你想保留的内容保存并退出即可
git add hello.txt #修改后记得添加到暂存区
#提交到本地库的时候不能带有文件名
git commit -m "merge test"
cat hello.txt
此时,手动解决了修改冲突问题
合并分支只会修改合并的分支,对于其他分支不变,比如在main里面合并hot-fix,那么只会修改main里面的文件,而不会改变hot-fix里面的文件
8、远程仓库的建立以及基本操作
团队协作
对内协助作
假设有三个账户
A
B
C
创建库的时候,一般库的名称和你的文件夹的名称一致即可
https和ssh是两种不同的协议
8.1创建远程库别名
#远程库的别名就是可以取一个简单的名称,省的每次得要复制一大段https:这种网址
git remote -v #查看远程仓库的别名
git remote add Ash-end https://github.com/Ash-end/Ash-end.github.io.git#这样就把这个网址的别名改成了Ash-end
#不过由于我的已经有了别名,所以就不实际操作了
git remote -v
8.2 推送本地库到远程库里面去
git push Ash-end main #把main分支推送到Ash-end别名的本地库里面取
放到远程库成功
8.3 拉取远程库的代码到本地库里面去
当团队其他人推送到了远程库新的版本,这时候我们的本地库和远程库的东西就不一致了,这时候就需要拉取远程库的内容到本地库里面
在github里面修改了文件后
git pull Ash-end main#把Ash-end远程库里面的main分支拉取到本地库里面
此时本地库和远程库的代码就同步了:
8.4 (团队内协作)团队其他成员克隆远程库
git clone git@github.com:Ash-end/Ash-end.github.io.git #从Ash-end库里面克隆到自己本地
- 拉取代码
- 初始化本地库
- 创建别名
#另一个人修改了文件代码后
vim hello.txt
git add hello.txt
git commit -m "modified by linyinj" hello.txt
git push Ash-end main #想推送到远程库里面去
远程库的所有者进入github里面->settings->manage access->invite a collaborator-> pending invite-> 发给linyinj->在github里面复制这个邀请函->accept invitation
此时,别人就能在你的库里面推送了
8.5 跨团队协作
团队外的人员->github->去别人的远程仓库里面->Fork->此时自己的库里面就有了代码且可以修改->修改之后提交成功了,但是只是修改了自己的账号的库->pull request->new pull request->create pull request->则在库拥有者的界面就能看见PUll request->点击连接查看修改的代码->Pull request里面可以随时聊天->merge pull request -> confirm merge(合并好之后就能看见别人修改的代码了)
8.6 ssh免密登录
先在你的user文件里面把.ssh文件删掉,然后在那个界面右键打开git bash
ssh-keygen -t rsa -C xxx@qq.com #生成公钥和私钥
#连续敲三次回车
#再次回到家目录,则.ssh里面pub就是公钥
cat id_rsa #把里面公钥复制
#到github账号里面 settings->SSH and GPG keys -> new ssh-key 把公钥复制到里面的key即可,名字任取,add ssh key
提交成功之后,以前要用到https或者库别名的地方都可以替换成ssh连链接