一:介绍
1.什么是git?
是一种用于协同开发的版本管理工具
2.git能干什么?
完成 协同开发
项目,帮助程序员整合代码
- 帮助开发者合并开发的代码
- 如果出现冲突代码的合并,会提示后 提交合并代码的开发者,让其解决冲突
2种Git软件:SVN、Git
- svn(集中式管理)
- git(分布式管理、协同开发、版本管理)
常用的git版本控制器管理代码的公共平台
- github
- gitee
3.Github、Gitee、Gitlab的区别
- Github:一般开源的代码都放在github,代码托管平台(公有仓库、私有仓库),公司代码一般不会放在上面
- Gitee:中国版本的github,开源低吗放在共有仓库,有一部分公司的代码会托管到gitee的私有仓库
- Gitlab:公司自己搭建的github,公司内部自己访问(可以用Docker拉1个gitlab的镜像跑起来)
4.下载链接:https://git-scm.com/
5.安装
一路下一步即可
6.工作流程
① 工作区:工作的目录,文件夹下,存放一些文件,文件中写内容
② 暂存区:工作区的更改,提交到暂存区(在暂存区中临时存储)
③ 版本库:本地文件,内容变更记录
7.提示信息
1.有红色信息(工作区有内容,没有被提交到暂存区),就执行 add
2.全绿信息(内容全部在暂存区),才执行 commit
3.只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
一:核心操作
1.初始化仓库
让当前路径被git管理起来
git init
# 在当前路径下创建darker文件夹,并被git管理
git init darker
.git目录
默认隐藏,可以通过命令ls -ah
查看
2.把文件添加到暂存区
添加指定文件
git add 文件名
一次添加所有文件
git add .
3.提交暂存区内容到版本库
git commit -m '本次提交的说明'
4.把项目提交到(远程)仓储
git push
5.撤销暂存区提交:add的逆运算(很少使用)
①撤销所有暂存区的提交
git reset HEAD .
②撤销某一文件的暂存区提交
git reset 文件名
③撤销所有暂存区的提交
git reset .
6.过滤文件
项目中添加过滤文件,加了之后,被过滤的文件/文件夹就不被git管理了
在项目下新建.gitignore
文件(编写过滤规则#表示注释
)
- 忽略某个文件夹(写文件夹名):
node_modules
- 忽略某个文件(写文件名):
.DS_Store
- 忽略以
npm-debug.log
开头的所有文件:npm-debug.log*
- 忽略以
.sln
结尾的所有文件:*.sln
- 忽略
a文件夹
下的aa.txt
:a/aa/txt
.gitignore
是要被管理起来的
在Windows平台下创建的时候,可能需要在最后加一个.,也就是:.gitignore.
①.gitignore 文件
1.在仓库根目录下创建该文件 2.文件与文件夹均可以被过滤 3.文件过滤语法
②过滤文件内容
② 本地创建,传到远端
- 拉取最新分支:
git pull origin master
- 切换到主分支:
git checkout master
- 合并分支:
git merge dev
- 推送到远程仓库:
git push origin master
四:git远程连接
0.远程拉取项目
git clone [项目地址]
1.无仓库,需要新建
mkdir test cd test git init touch a.txt git add a.txt git commit -m "添加了a.txt" git remote add origin 已有仓库 # 连接远程 git push origin master
2.已有仓库
cd test git remote add origin 已有仓库 # 连接远程 git add . git commit -m "XXX" git push origin master
3.查看远程仓库(没有就看不到)
git remote
4.线上回滚
# 1 切换到master分支 # 2 回滚打某个版本 git reset --hard 版本号 # 3 强制提交代码 git push origin master -f
五:解决冲突
出现冲突的2种情况: 1.分支合并 2.同一条分支上,2个人同时修改了同一个文件的同一行代码
1.情况1
A和B同时开发项目并且都将服务器的分支代码拉(pull)到自己电脑上
A开发完后,将自己的项目推(push)到了服务器的分支
A和B修改的是同一行代码
B开发完后,没有先拉(pull),而是直接将自己的项目推(push)到了服务器的分支
此时,出现了冲突,这个冲突需要由B解决
解决方法:
git merge A_master (在B_dev分支上操作) -解决冲突(删你的,同事的,合并起来) git add . git commit -正常了,冲突解决
2.情况2
master分支上a.py中的第10行代码为 x = 1 dev分支上a.py中的第10行代码为 x = 99 在master分支合并dev分支 此时同一个文件的同一行代码,在2个分支不同,出现了冲突
解决方法:
# 手动线下合并代码并提交到远程 git checkout master git merge dev -如果出冲突,解决 -git add . -git commit -m 'xxx' -git push origin master
五:git项目创始者和开发者
1.项目创始者
负责分支的创建和管理
2.项目开发者
把项目拉下来,继续开发
git clone https://gitee.com/xxxxxx/xxxx.git -能看到完整的版本和日志控制 -可以回复到任意版本 git rest --hard 版本号 git checkout . # 表示回到指针指向的版本,因为已经用git rest --hard把指针移动了,所以checkout .就是当前再的版本上的东西 #本地新增c.txt文件 -提交到暂存区 -提交到版本库(没有提交到远程,远程看不到) -提交到远程:git push origin master # 让a文件夹中的代码成为最新的 -git pull origin master
重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去
六:ssh连接和https连接
1.公司内部大部分用ssh连接
-领导给你一个git地址(项目地址) -你 git clone 地址 到本地 -改代码,改完了---》提交(禁止) -ssh配置,以后都不用输密码了
2.配置如何做
# 生成公钥与私钥(邮箱可以随意填写) ssh-keygen -t rsa -C "*@*.com" # 查看公钥 cat ~/.ssh/id_rsa.pub
会在C:Users用户.ssh
下生成2个文件
- id_ras:公钥
- id_ras.pub:私钥
-对称加密(加密和解密用同一套秘密) -非对称加密(公钥和私钥),公钥加密,私钥解密 -生成一对公钥和私钥(用命令) -https://gitee.com/help/articles/4181 -ssh-keygen -t rsa -C "xxx@qq.com" 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥) -把公钥复制出来,去码云上配置
3.跟远程操作有三个命令
git pull
git push
git feacth(一般不用,他跟pull是一个东西,当作不知道)
删除Windows中的连接git的密码:
Windows凭据
七:PyCharm操作git
1.创建一个文件夹,右键Git Bash here
,输入下面命令
git init
此时,会生成一个.git
的隐藏文件夹
2.将项目克隆下来
git clone https://xxxxx.gitee.com.xxx.git
3.右键 - 用pycharm打开
4.点击左上角:File - Settings,进行如图操作,可以获取到Git当前版本
前提:安装 并 启动了git插件
5.2个按钮的功能
6.更多功能
7.一步到位的操作(修改+添加到暂存区+注释并添加到版本库+push到远程仓库)
八:其他操作
1.查看ssh
密钥
①进入.ssh目录
cd ~/.ssh
②查看id_rsa.pub文件
cat id_rsa.pub
2.克隆远程项目
git clone 远程源地址
3.删除文件
①删除版本库中的文件
git rm filename
②恢复工作区中误删的文件
git checkout -- filename
PS:git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
4.远程仓储
①创建ssh key密钥
ssh-keygen -t rsa -C "youremail@example.com"
②在远程仓库中添加ssh公钥
③关联远程库
git remote add origin git@server-name:path/repo-name.git
④第一次推送master分支的所有内容,此后只需要使用git push origin master即可推送最新修改
git push -u origin master
5.多人协作
①查看远程仓储的详细信息
git remote -v
②推送本地分支到远程仓库
git push origin 本地分支名
如果发生冲突,用git pull试图合并,如果发生冲突则解决冲突,再进行推送
如果git pull后提示no tracking information(没有追踪信息),则进行第四项,建立关联,之后pull,有冲突再合并
③在本地创建和远程分支对应的分支
git checkout -b 本地分支 origin/远程分支名
④建立本地分支和远程分支的关联
git branch --set-upstream 本地分支名 origin/远程分支名
6.分支策略
1.master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
2.干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
3.每个人都有自己的分支,时不时地往dev分支上合并就可以了
7.git fetch和git pull的区别
与git pull相比git fetch相当于是从远程获取最新版本到本地,但不会自动merge
- 如果需要有选择的合并git fetch是更好的选择
- 效果相同时git pull将更为快捷
九:修改已有项目的流程
1.初始化仓库
git init
2.设置局部用户
git config user.name '用户名' git config user.email '用户邮箱'
3.添加已有仓库
git remote add origin 已有仓库
4.把项目拉下来
- 拉下来不是一个项目文件夹,而是项目中的许多文件和文件夹
git pull 仓库地址
5.修改好项目
6.添加到版本库
git add .
7.提交注解(此次操作修改了什么等)
git commit -m '修改的内容'
8.推到远程仓库
git push origin master