git
git ssh配置
- windows下的配置:
- 下载git bash
- ssh-keygen -t rsa -C "github邮箱地址:”
- cd ssh
- 把rsa.pub 复制内容到github的settings的ssh里面
- git@github.com:a376230095/aaa.git
- linux下的配置:
- ssh-keygen -t rsa -C "github邮箱地址:”
- cd ssh
- 把rsa.pub 复制内容到github的settings的ssh里面
git前置条件的配置
- 配置提交用户的名称
- git config --global user.name “github用户名”
- git config --global user.email "github邮箱地址”
- 如果没有git项目
- git clone git@github.com:a376230095/aaa.git
- 会生成aaa的git项目,并自动同步到远程仓库
- 如果是自己新建一个git项目
- git init 会在当前的目录生成git项目
- 在github中新建一个空的项目,一定要是空的,获取这个项目的ssh的链接
- git remote add origin git@github.com:a376230095/aaa.git
- git push -u origin master 这里就是把git的分支提交到master里面,才算是真正的同步
git工作原理
- 工作区workspace
- 项目文件所在的文件夹里,统称为工作区。
- 暂存区stage
- 用来保存要提交到本地版本库的所有文件,相当于一个缓存区。
- 版本库repository
- —个简单的数据库,包含所有用来维护和管理的项目的修订版本和历史的信息。
- 分为两部分:
- 本地仓库local
- 远程仓库remote
- 不同分区的工作与命令的结合
- git add会把工作区的文件放到暂存区
- git commit 会把暂存区的文件放到本地版本库
- git push 把本地版本库放到远程版本库
- git pull会把远程仓库放到工作区中
- git clone/fetch会把远程仓库放到本地仓库
- git checkout可以把本地仓库的内容放到工作区中
开发测试的流程:
- master作为主分支,一般都是要经过测试通过才拉到master分支上
- 开发的时候先把项目拉到develop分支上,每一个开发对各自负责的功能,再把分支弄到各自的feature分支上
- 代码管理者把开发者开发完的分支弄到develop上,等测试把代码的功能测试完成后,就会弄到release分支上
- 大家一起评估这个release版本是否可以上线,可以就弄到master分支上
git clone和git pull的区别
- clone是本地没有repository时,将远程repository整个下载过来。
- pull是本地有repository时,将远程repository里新的commit数据(如有的话)下载过来,并且与本地代码merge。相当于git fetch和git merge
git命令解析
- git init 创建一个新的git项目
- git add 添加文件到暂存区
- git add . 添加当前路径的所有文件
- git add -A 添加所有目录的文件
- git staus 查看工作区和暂存区等的状态
- git commit -m ‘提交的原因’ 会把暂存区的文件放到本地版本库
- git log 查看历史的提交记录,但如果当前版本比较久,无法查看后面版本的提交记录
- git reflog 查看现在,未来,以前的HEAD信息
- git clone url 克隆仓库,包括.git
- url格式:用户名@服务器地址:仓库地址
- git clone git@github.com:a376230095/aaa.git
- git pull 相当于git fetch和git merge。其意思是先从远程下载git项目里的文件,然后将文件与本地的分支进行merge。
- git
- git remote add [remote name] [url] 本地仓库和远程仓库建立联系
- git remote -v 查看远程分支
- git remote rm 删除远程分支
- git remote add origin git@github.com:a376230095/aaa.git
- git push 推送本地仓库的内容到远程仓库中
- 首次push的时候git push -u origin master,下次推动直接git push即可
- git reset [–soft] [–mixed] [–hard] commit的版本 版本回退
- –mixed:默认项。修改版本库,修改暂存区,保留工作区。会清空暂存区的修改。
- –soft:修改版本库,保留暂存区,保留工作区。只需要commit即可恢复版本回退前的状态。
- –hard:修改版本库,修改暂存区,修改工作区。回退最彻底的一种。
- 例子:
- git reset --hard HEAD^ 回到上一个版本
- git reset --hard HEAD^^^ 回到上上上个版本
- git reset --hard 13d458 回到指定commit的版本
- git reset --hard HEAD@{4} 回到指定的第4个版本
- git diff 对比文件或者版本信息
- git diff a.txt 对比工作区的内容和本地仓库有什么不同
- 比如当前工作区的a.txt 加了一行tong的代码,就会有个+号
- git diff “HEAD” “HEAD^” 对比当前版本和上一个版本有什么不同
- 比如说当前版本比上一个版本多了一个a.txt,就会显示- a.txt
- git diff a.txt 对比工作区的内容和本地仓库有什么不同
- git checkout 可以把仓库的文件重置到工作区中,也可以切换分支
- git checkout 1.txt 把仓库的1.txt文件放到工作区
- git checkout 分支名 切换当前分支到指定的分支名上
- git checkout -b 分支名 创建指定分支,同时切换当前分支到分支上,好像比较常用
- git branch 分支管理,打印当前的分支
- git branch -r 打印远程仓库的分支
- git branch -a 打印全部分支
- git branch 分支名 创建分支,但分支还是没有切换过去
- git branch -d 分支名 删除分支,如果分支没有merge提交到其他分支,就不给删除
- git branch -m oldName newName 修改分支名
- git merge 分支名 将该分支合并到当前分支上
- 快速合并分支:master和其他分支或者其他和其他分支,在代码上没有冲突,可以快速合并
- 非快速合并分支:分支之间的代码有冲突,需要人工判断合并之后有没有问题
.gitignore的使用
- 作用:把不需要git管理的文件都放在.gitgnore,确保我们的git都是有用的东西
- 使用.gitignore:
- 创建.gitignore文件
- 把不要的文件放入.gitgnore文件夹中(支持通配符)
*.iml /.iead .git
几种git的场景
- 当删除文件的时候,还没commit的恢复方法
- git rm 文件或者git add可以保存这次修改,然后git commit -m 即可同步到仓库了
- git checkout – 文件 ,可以把文件恢复
- 当文件删除了,也commit,恢复文件的方法
- git log去找到文件还在的那个版本
- git reset --hard 前六位的commit代码标识,或者git reset --hard HEAD^ 表示回到上一个版本,^^表示回到上上个版本,以此类推
- 推送远程分支
- git checkout -b localbranch 切换创建分支
- git branch 查看分支是不是创建并切换好了
- git push origin localbranch:localbranch 推送本地分支到远程分支
- git push origin :localbranch 删除远程分支
- 当通过git pull 拉取代码,本子自己提交commit代码,然后没有及时git push,不给git push的方法
- git pull origin master 再一次拉取代码
- git push -u origin master 再推送一下代码
- 这样就相当于远程推送了我们最新的提交,工作区也是最新的状态
pychram的git学习
- 以下的操作再pycharm的cmd操作
- 注:空文件夹git不会上传的
- 加入.gitgnore可以忽略一些文件上传到github上
- 在github注册一个账号
- 在项目的cmd中git init 就会创建一个git项目了
- git status就可以查看哪些文件没有被add进去
- git add abc.py 就可以add到本地的git了,但是还没完成加进去
- git commit -m “add abc.py” 表示完全添加到项目里面去了,而且写了备注是add abc.py
- unable to auto-detect email address出现这个错误,执行以下的命令
- git config --global user.email “376230095@qq.com”
- git config --global user.name “tongtong”
- git remote add origin https://github.com/a376230095/appium_python_pytest.git 表示添加到GitHub里面的appium_python_pytest的repo,通常是.git,这个时候还没有真正同步到远程
- git push -u origin master 这里就是把git的分支提交到master里面,才算是真正的同步
- 如果没有登录,pycharm会让你登录GitHub的
- 当你登录之后,可能还会提示你再输入GitHub的账号密码,再cmd中输入
git问题集
- warning: LF will be replaced by CRLF in test1.txt. The file will have its original line endings in working directory
- 原因:使用了windows来编辑,里面的换行符和git本身使用的linux换行符不一样,会出现一些问题
- 解决:
- 可以不去解决,通常不建议在windows上修改代码,或者使用pycharm等修改代码
- git config --global core.autocrlf true,但好像不太行,不管了 这个可以让windows的换行符自动变更为linux的
- pycharm的github什么都配置好了,为什么
- git remote -v 查看远程仓库名称
- 如果看到是origin https的,需要取消
- git remote rm origin
- git remote add origin git@github.com:你的用户名/你的仓库名.git