Git 是目前世界上最先进的分布式版本控制系统(没有之一)
优点:1)方便多人协同开发 2)方便版本控制
Git服务器 --> 本地仓库 --> 客户端 --> 本地仓库 --> Git服务器
1. 工作区: 对于添加、修改、删除文件的操作,都发生在‘工作区’中 (红色文件)
2. 暂存区: 指将工作区中的操作完成小阶段的暂时存储。(绿色文件)
3. 仓库区: 1)仓库区表示个人开发的一个小阶段的完成
2)仓库区中记录的各版本是可以查看并回退的
3)但是在暂存区的版本一旦提交就再也没有了
# 可以使用git status查看当前代码的状态,处于哪个区
.撤销修改
撤销仓库区的代码就相当于回退版本操作
撤销暂存区代码
# 第一步:将暂存区代码撤销到工作区
git reset HEAD 文件名
# 第二步:撤销工作区代码
git checkout 文件名
.git
隐藏文件;安装:sudo apt-get install git 或者 yum install git 查看: git
# 腾讯云服务器自带git
进入到test
,并创建本地仓库.git;
新创建的本地仓库.git
是个空仓库
cd Desktop/test/
git init # 创建本地仓库
git init 后,会创建一个 .git 的本地仓库,一般项目都和它同级放置
git config user.name '张三'
git config user.email '[email protected]'
#查看配置是否生效
git config --list
#默认不配置的话,会使用全局配置里面的用户名和邮箱 全局git配置文件路径:
~/.gitconfig
5. 本地仓库搭建好了,可以测试了 在项目文件夹下,创建demo.py文件,用于版本控制演示
查看文件状态: git status
- 红色表示新建文件或者新修改的文件,都在工作区.
- 绿色表示文件在暂存区
- 新建的demo
.py
文件在工作区,需要添加到暂存区并提交到仓库区
将工作区文件添加到暂存区
# 添加项目中所有文件 git add .
# 添加指定文件 git add demo.py
将暂存区文件提交到仓库区(本地仓库)
git commit -m '版本描述'
#
commit
会生成一条版本记录#
-m
后面是版本描述信息
添加和提交的合并命令: git commit -am "版本描述"
查看历史版本
git log 或 git reflog
# git reflog 可以查看所有分支的所有操作记录(包括commit 和 reset 的操作),包括已经被删除的commit记录;
# git log 不能查看已经删除的 commit 记录
说明: HEAD
表示当前最新版本
HEAD^
表示当前最新版本的前一个版本
HEAD^^
表示当前最新版本的前两个版本,以此类推...
HEAD~1
表示当前最新版本的前一个版本
HEAD~10
表示当前最新版本的前10个版本,以此类推...
总结: (三个区域的操作,相当于把代码清除掉)
#仓库区的代码,版本回退:
git reset --hard HEAD^ 或者 git reset --hard 版本号(版本回退上一个版本后,代码直接恢复到上一个版本,不会用add 或者commit后续操作 :nothing to commit, working directory clean 。 如果有回退之前的版本号,也可以复原代码,使用: git reset --hard 版本号)
#暂存区代码,撤销修改:
1.git reset HEAD 文件名
2.git checkout 文件名
#工作区代码,撤销修改:
git checkout 文件名称
Git源代码仓库 https://github.com/
总结:
(配置和各种提交,拉取 均因在 Desktop/manager/test007/ 的文件 test007的项目文件夹下 )
经理工作:
0. 准备经理的文件 Desktop/manager/
1.git clone https地址或者ssh地址
cd Desktop/manager/
git clone https://github.com/***/test007.git
2.配置身份信息 ()
cd Desktop/manager/test007/
git config user.name '经理'
git config user.email '[email protected]'
3.创建项目
4.推送项目到远程仓库
# 工作区添加到暂存区
git add .
# 暂存区提交到仓库区
git commit -m '立项'
# 推送到远程仓库
git push# 拉取更新
git pull
张三工作:
0.准备张三的文件 Desktop/zhangsan/
1.克隆项目到本地
2.配置张三身份信息
3.模拟张三同步服务器代码 一般需要先 git pull 再进行开发;步骤和 manager一致
在 push 的时候需要设置账号与密码,该密码则是 github 的账号与密码
如果在每次 push 都需要设置账号与密码,那么可以设置记住密码:
设置记住密码(默认15分钟): git config --global credential.helper cache 如果想自己设置时间,可以这样做(1小时后失效): git config credential.helper 'cache --timeout=3600' 长期存储密码: git config --global credential.helper store
总结:
提示:多人协同开发时,避免不了会出现代码冲突的情况
原因:多人同时修改了同一个文件
危害:会影响正常的开发进度
注意:一旦出现代码冲突,必须先解决再做后续开发
减少冲突的操作方式1.养成良好的操作习惯,先pull在修改,修改完立即commit和push
2.一定要确保自己正在修改的文件是最新版本的
3.各自开发各自的模块
4.如果要修改公共文件,一定要先确认有没有人正在修改
5.下班前一定要提交代码,上班第一件事拉取最新代码
6.一定不要擅自修改同事的代码
冲突案例 比如: zhangsan增加了代码,然后push 到了 git 上; manager 没有先 pull , 直接在相同文件下开发,manager add , commit 都会正常,但当 push 到 git 时,会有冲突导致报错;
解决: 1. 先 git pull 拉取代码
2. 提示冲突文件,打开文件解决冲突,删掉冲突代码 和提示标识 " <<<<<" 与"========="
3. 解决完冲突代码后,依然需要 add 、commit 、 push
以下是一个标准的冲突表
<<<<<<< HEAD
new new new new code
=======
old old old code
>>>>>>> xxxxxxxxxxxxxxxxxxxxxxx
<<<<<<< HEAD 到 =======里面的内容是自己分支commit的内容
=========到 >>>>>>里面的内容是远程下拉的
根据需要删除代码就行了 完事把<<<<<<< ======= >>>>>>都删掉冲突就解决了
当某一个大版本完成之后,需要打一个标签用于 记录大版本 或者 备份大版本代码
1. 进入本地仓库 (与 .git 同级的文件夹下)
2. 本地打标签 git tag -a 标签名 -m '标签描述'
例: git tag -a v1.0 -m 'version 1.0'
3. 推送标签到远程仓库 git push origin 标签名
git push origin v1.0
4. 删除本地和远程标签
# 删除本地标签 : git tag -d 标签名
# 删除远程仓库标签: git push origin --delete tag 标签名
1. 分支的作用
1) 区分生产环境[master主分支]代码以及开发环境代码[dev分支]
2) 研究新的功能或者攻关难题
3) 解决线上bug
2. 查看当前分支 git branch
3. 创建分支步骤
1)创建并切换到 dev 分支
git checkout -b dev
2)设置本地分支跟踪远程指定分支(将分支推送到远程)
git push -u origin dev
3) 修改 dev 分支源代码: add 、commit 、 push
4) dev 分支合并到 master 分支
(1) 先切换到主分支: git checkout master
(2) dev 分支合并到 master 分支: git merge dev
5) 合并分支默认在本地完成,合并后直接推送即可
git push
#案例: 如果在zhangsan 创建了分支 test 01 , 然后在里面修改了代码; 正好在这个期间,其他人也修改了相同文件夹,并push 到了master分支上。 zhangsan 在 test01 分支上 git push 会报错。
# 解决: 两种方式:
1) 指定分支push -- git push origin branchName , 合并主分支,在主分支提交时,处理冲突
2)可以切换到master主分支,先 git pull 更新最新的mastet 分支代码;再切换到 test01 进行 push 与 合并
# 有些冲突的解决,需要你指定分支操作
# 推送到指定分支: git push origin branchName
# 拉取指定分支: git pull origin master
--------------------------------常用 必须掌握-------------------------------------
# 初始化一个git仓库 让项目文件夹使用git管理起来 产生一个.git隐藏文件夹(本地仓库)
git init# 查看当前处于状态
git status# 将工作区代码提交到暂存区
git add .# 将暂存区代码提交到本地仓库
git commit -m "提交的备注"# 将本地仓库代码-->推送到远程仓库
git push# 拉取远程仓库最新代码
git pull# 查看日志/详细日志
git log/reflog# 第一次克隆项目到本地
git clone 远程仓库地址(https)# 创建分支并切换分支
git checkout -b 分支名称# 切换分支
git checkout 分支名称#合并分支
git checkout master
git merge dev--------------------------------不太常用会copy-------------------------------------
# 版本回退(本地仓库)
git reset --hard HEAD^
git reset --hard 版本号#从暂存区撤销
git reset HEAD -- 文件名
git checkout 文件名# 检出 (工作区撤销)
git checkout 文件名# 切换分支
git checkout master# 查看当前分支
git branch# 删除
git rm# 创建标签
git tag -a 标签名 -m '标签描述'
# 推送标签到远程仓库
1. 工作区 add commit push pull (pycharm实际操作中)
1. 新建分支dev --> pull(master) --> push
2. 先在自己分支写代码,-> 提交/commit -> push
3. 切换到master分支上/checkout --> 拉取master代码 pull --> 合并自己分支的代码到 master 分支/(选择自己的分支,dev) merge into current -->push
2. IDEA进行git push 操作,出现了如下图的操作
Login(用户):码云/Github 远程仓库的用户名。 一般都是填写 邮箱地址。
Password(密码):这里需要的密码时 码云/GitHub 远程仓库的 登录密码(忘记密码可以更改密码再在这里输入)
3. git push 时报错 fatal: Authentication failed for 'https://gitee.com/yl_dawn/spring.git/'
这个一般是输入的gitee账号(邮箱地址) 与 密码(登录密码) 有问题导致的;可以先删除 电脑里
windows的凭证管理器中的记录,然后再 git push 时,输入 gitee 的账号,密码;
windows的凭据管理器查看地址:
git pull/clone 报错 “git pull failed: Authentication failed for xxxxx.git”_yanglangdan的博客-CSDN博客
4. pycharm 处理冲突:
ex: 1. 老杨修改了master 分支的 login.py 文件;
2. 小杨在自己的dev分支上开发(且没有拉取master分支),也改了 login.py 文件;
3. 小杨开发完成后,add, commit, push 到自己的远程 dev 分支,然后切换到master分 支,pull 更新master 的本地代码; git merge dev 时,产生冲突:
You should resolve all conflicts before update.
点击merge就可以看到本地文件和远程的不同;
通过 xx/删除, >>/追加 处理掉异常;再执行 git commit , git push
相关文件推荐:pycharm版本控制和数据库管理_皮皮blog-CSDN博客_pycharm数据库管理
5. git merge 与 git rebase 的区别:
推荐文档:https://segmentfault.com/a/1190000005013964