git使用指南
git软件
- 下载安装git软件。
- 安装成功后,任意路径位置,鼠标右键出现Git-Gui和Git-Bash图标,即安装成功。
- 在任意路径(文件夹下)进入Git-bash环境,开始git之旅吧。
git版本控制使用流程
-
进入要管理的文件夹
-
执行初始化命令
git init
-
管理目录下的文件状态
git status # 新增的文件和修改过后的文件都是红色的
-
管理制定文件(红变绿)
git add 文件名 git add . # . 表示管理所有文件
-
个人信息配置:用户名和邮箱【第一次使用需要】
# 全局配置 git config --global user.mail "your@exmaple.com" git config --global user.name "yourname" # 局部配置:当前项目 git config user.mail "your@exmaple.com" git config user.name "yourname"
-
生成版本
git commit -m '描述信息'
-
产看版本记录
git log
忽略文件
-空文件夹不被管理
-指定某些文件或者文件夹不被git管理
-在项目根路径,跟.git文件夹一个路径,新建.gitignore.,在里面配置
- 语法:
# 号是注释,没有用
文件夹名字,表示文件夹忽略,不被管理
/dist 表示根路径下的dist文件夹,不被管理
*.py 表示后缀名为py的文件,都被忽略
*.log*
git三大区域
工作区:编写代码的地方
- 已经管理的文件(空白)
- 新文件/修改为文件(红色)
暂存区:暂时管理起来的将要推送到版本库 # 通过add将工作区红色的文件推送到暂存区
版本库:存放版本的地方 # 通过commit命令将版本推动到版本库
git回滚
# 回滚到之前的版本
git log
git reset --hard 版本号(形式1)
# 回滚到之后的版本
git reflog
git reset --hard 版本号(形式2)
三区域切换
分支和工作流
- 查看分支
git branch
- 创建分支
git branch 分支名称
- 切换分支
git checkout 分支名称
- 合并分支
git merge 要合并的分支
# 注意:切换分支再合并;站在当前分支上,把其他分支合并过来
- 删除分支
git branch -d 分支名称
- 工作流
实战中至少保留两个版本,一个是上线环境下的稳定版,一个是开发环境下的开发版。
托管代码Github
-
使用github:官网注册账号
-
新建远程仓库
- 在家里上传代码(第一次推送时可能需要提供github账号)
1. 给远程仓库起别名 origin
git remote add origin 远程仓库地址
2. 向远程仓库推送代码
git push -u origin 分支
- 到公司新电脑上第一次获取代码
1. 克隆远程仓库代码
git clone 远程仓库地址(内部已实现git remote add origin 远程仓库地址)
2. 切换分支 (clone会拷贝所有的分支)
git checkout 分支
- 在公司进行开发
1. 切换到dev分支进行开发
git checkout dev
2. 把master分支合并到dev [仅一次]
git merge master
3. 修改代码
4. 提交代码
git add .
git commit -m '...'
git push origin dev
- 回家继续写代码
1. 切换到dev分支进行开发
git checkout dev
2. 拉代码
git pull origin dev
3. 继续开发
4. 提交代码
git add .
git commit -m ',,,'
git push origin dev
- 在公司继续开发
1. 切换到dev分支进行开发
git checkout dev
2. 拉代码
git pull origin dev
3. 修改代码
4. 提交代码
git add .
git commit -m '..'
git push origin dev
- 开发完毕,要上线
1. 将dev分支合并到master,进行上线
git checkout master
git merge dev
git push origin master
2. 把dev分支也推送到远程
git checkout dev
git merge master
git push origin dev
忘记推送代码到github云端
如果在A电脑上开发的新功能忘记推送到github云端,此时在B电脑上是不发pull到新功能的代码。
这种情况下不可能在B电脑上重新开写已经开发完成的那部分代码,可以接着编写一些其他的代码后推送到github
然后回到A电脑上,pull新的代码。合并时可能出现冲突,此时手动处理冲突即可。
GitHub Desktop
- 图形界面的git命令操作软件,
- 告别单调的git命令行界面,鼠标点点点即可完成所有的git命令。
- 完美无缝对接Github.
补充
# 新建仓库的时候,不要勾选Readme初始化这个而仓库
不勾选的表示一个初始干净的项目,里面没有任何文件,并且会有连接此仓库的链接(https\ssh)
# git 远程操作命令
-git remote # 查看远程仓库(没有就看不到)
-git remote add origin https://gitee.com/liuqingzheng/lqz_test.git
# 跟远程仓库建立连接,并且起别名origin
- git clone https://gitee.com/liuqingzheng/lqz_test.git
# 将远程仓库拷贝克隆到本地(所有的分支版本全部拷贝下来)
# 需要注意拷贝下来默认只有master分支,但拷贝前仓库有的分支只有在checkout切换分支后才能看得到
-git push origin master
# 补充:
- 把本地的master分支提交到远程的origin,如果使用的是https,需要输用户名和密码
# 重点:每次再提交代码之前,一定要先更新代码(拉),如果不拉提不上去
ssh连接和https连接
# 1 公司内部大部分用ssh连接
-领导给你一个git地址(项目地址),你给领导一个公钥
-你 git clone 地址 到本地
-改代码,改完了---》提交
-ssh配置,以后都不用输密码了
# 2 配置如何做
-对称加密(加密和解密用同一套秘密)
-非对称加密(公钥和私钥),公钥加密,私钥解密
-生成一对公钥和私钥(用命令)
-https://gitee.com/help/articles/4181
-ssh-keygen -t rsa -C "lqz@qq.com" 生成到用户家目录的.ssh文件夹下(一个公钥,一个私钥)
-把公钥复制出来,再码云上配置公钥
# 跟远程操作有三个主要命令
git clone【仅第一次拷贝仓库使用】
git pull
git push
git feacth(一般不用,他跟pull是一个东西,当作不知道)
pycharm操作git
# 1 安装git
# 2 再pycharm中配置,setting---》git--->git.exe的地址
# 3 git clone --->等同于下图
# 4 使用pycharm创建本地分支(见下图)
# 5 拉取代码,如下图
# 6 push代码,如下图
# 7 pycharm版本不一样,位置可能不一样
协同开发出现的冲突
所有人在dev分支上开发提交代码,每次都需要先从远程拉下最新的代码,然后再修改编写代码,最后再向远程仓库提交代码;
提交代码时,由于多人可能同时操作一个位置的代码,可能出现代码的冲突;那后提交代码的同时就需要解决提交代码冲突的问题。
解决代码冲突的方式很简单,就是直接找到冲突的位置,手动选择合适的代码。删除其他冲突的代码,然后从重新提交。
# git pull origin master 拉下远程代码,同事和你修改了同一个位置,会冲突,如下
<<<<<<< HEAD
你的代码
=======
别人代码
>>>>>>> origin/master
# 3 处理方案
-删除你的代码
-删除同时代码
-合并你们的代码
分支合并出现冲突解决
遵循git工作流(git flow),在合并不同分支的代码是就会出现冲突。解决的方式和同一分支上协同开发时出现的代码冲突是相同的。
一般要在线下完成合并时出现的冲突,合并后再提交到远程仓库。
# 补充:如何在远端仓库创建一个新分支,如dev分支
- 直接在远端仓库通过在线的方式新建一个dec分支
- 在本地基于master创建一个dev分支,然后通过push的方式推送到远端。
git push origin dev # 站点本地任何站点都可以执行次命令来推送本地dev到远端dev
解决分支合并出现的冲突也可以在线上完成,不过基本思路和线下的一致,甚至可以再转到线下完成合并出现的冲突,解决后再推送的远端。
# 线上合并时,如果看到可自动合并,表示合并后不会有冲突,正常操作即可
# 测试人员点通过,直接合并即可
线上分支合并
线上回滚
# 1 切换到master分支
# 2 回滚打某个版本 git reset --hard 版本号
# 3 强制提交代码 git push origin master -f
pycharm找回误删,修改的东西
rebase(变基)使git的提交记录变的简洁
rebase应用场景1
将多条提交记录整合成一条记录。合并记录时建议不要合并那些已push到远程仓库的记录。避免造成版本不一致的混乱。
rebase应用场景2
将分支上的版本插到master主线上,形成一条线的结构,而不是merge形成的分支的结构
rebase应用场景3
代码忘记推云段端时的
注意事项
git rebase 冲突
解决冲突
git rebase -- continue