Git
""" 1)有红色信息(工作区有内容),就执行 add 2)全绿信息(内容全部在暂存区),才执行 commit 3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本 """ cd ~/Desktop/luffycity git init # 针对当前项目配置用户名和邮箱 git config user.name 'bubu' git config user.email '123@qq.com' # 针对当前电脑进行全局配置,意味着以后所有的项目都使用这个账号信息 # git config --global user.name 'bubu' # git config --global user.email '123@qq.com' 注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用 | 分支前缀 | 描述 | -------- | ------------------------------------------------------------ | master | 生产环境分支,将来可以部署到生产环境(公司的外网服务器)的代码 | release | 预发布环境分支,将来可以部署到预发布环境的代码,也可以是rel | develop | 开发环境分支,也可以是dev | feature | 新功能,新增业务分支,也可以是feat | hotfix | 修复bug问题、漏洞分支,也可以是fix | test | 测试相关分支 release/feature/xxx # 表示待发布分支下的xxx业务功能相关代码 develop/feature/xxx # 表示开发分支下的xxx业务的新功能代码 develop/test/xxx # 表示开发分支下的正在测试的xxx业务功能的代码 develop/hotfix/xxx # 表示开发分支下的修复xxx业务相关功能的bug # 当然,分支名称并不是固定的,只要能让开发人员一目了然,名字都可以换,所以也可以这样: release/xxx # 表示待发布的xxx业务新功能代码 feature/xxx # 表示正在开发的xxx业务功能代码 test/xxx # 表示正在测试的xxx业务功能代码 hotfix/user # 表示正在修复bug的xxx业务功能的代码 # 例如我的码云账号是 649641514@qq.com,那么该账号生成ssh秘钥对(基于rsa加密算法生成的秘钥对,公钥和私钥) ssh-keygen -t rsa -C "649641514@qq.com" # 查看生成的秘钥对中的公钥(私钥id_rsa保存在自己电脑不要乱动,公钥id_rsa.pub需要复制文件内容到码云平台) cat /home/moluo/.ssh/id_rsa.pub # 把公钥进行复制到码云平台上 https://gitee.com/profile/sshkeys # 切换项目的仓库地址,设置线上仓库 # git remote remove origin # 删除仓库地址,origin可以理解是一个变量,因为当前时一个新仓库,所以不需要执行这段。 git remote add origin git@gitee.com:mooluo_admin/luffycity.git # 新仓库地址,等同于origin= git..../luffycity.git # 分支管理,git提交代码版本并同步到远程服务器。 git branch # 查看分支 # 刚执行git init 初始化时,会没有分支,因此我们需要进行第一次的代码提交。 cd ~/Desktop/luffycity git status # 查看仓库状态 git add . git commit -m "feature:项目初始化" # 撤销所有暂存区的提交 git checkout . # 撤销某一文件的暂存区提交 git checkout 文件名 # add的逆运算 git reset HEAD . # 撤销所有暂存区的提交 git reset 文件名 # 撤销某一文件的暂存区提交 git reset . # 撤销所有暂存区的提交 git branch # git branch <分支名称> # 新建分支 # git branch test # 例如:创建一个test分支 # git checkout <分支名称> # 切换分支 # git checkout test # 例如:切换到test分支,检出分支代码 # git branch -d <分支名称> # 删除分支 # git branch -d test # git push <远程仓库别名> --delete <分支名称> # 删除远程服务器分支 # git push origin --delete test # 例如:删除远程仓库origin中的test git checkout -b develop # 创建本地分支develop, develop在自定义分支模型(git-flow)中属于开发分支 #使用`.gitignore`可以在git上传或下载代码时,把一些不必要记录的垃圾文件/目录过滤掉。 注意:必须保证.git 和.gitignore在同一级目录下,才能生效。 git add . git commit -m "feature:.gitignore新建忽略文件" # 推送代码记录到远程服务器的代码仓库 git push origin develop # 推送的过程中,如果本地有该分支,但是线上没有这个分支,则git会自动在远程中创建该分支 # 因为线上没有master分支,所以我们可以把develop分支的代码合并到master下面。 # 当然这个操作,一般都是develop的功能已经开发完成了,并且经过测试没有问题了,才会合并代码 git checkout master # 要合并到哪个分支下面,就要切换到对应分支 # 合并代码操作 git merge develop # 推送master主分支到远程服务器 git push origin master git commit 提交版本的描述信息,编写前缀规范: | 描述前缀 | 描述 | | --------- | ------------------------------------------------------------ | | feature: | 本次提交的代码用于开发新功能,新增业务 | | fix: | 本次提交的代码用于修复bug问题、漏洞 | | docs: | 本次提交的代码用于修改文档,注释等相关 | | style: | 本次提交的代码用于修改代码格式,不影响代码逻辑,常见的代码规范:PEP8,PEP484 | | refactor: | 本次提交的代码用于项目/代码重构,理论上不影响现有功能(针对代码的重写,改造原来的模块/类/函数/方法) | | perf: | 本次提交的代码用于提升性能,代码优化 | | test: | 本次提交的代码用于增加或修改测试用例代码 | | deps: | 本次提交的代码用于升级项目依赖(更新依赖模块 | ################################################## 查看仓库状态 """ # 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看 git status -- 查看仓库状态 git status -s -- 查看仓库状态的简约显示 """ 工作区内容提交到暂存区 """ git add . -- 添加项目中所有文件 git add 文件名 -- 添加指定文件 """ 撤销工作区操作:改、删 """ git checkout . -- 撤销所有暂存区的提交 git checkout 文件名 -- 撤销某一文件的暂存区提交 """ 撤销暂存区提交:add的逆运算 """ git reset HEAD . -- 撤销所有暂存区的提交 git reset 文件名 -- 撤销某一文件的暂存区提交 git reset . -- 撤销所有暂存区的提交 """ 提交暂存区内容到版本库 """ git commit -m "版本描述信息" """ 撤销版本库提交:commit的逆运算 """ 回滚暂存区已经提交到版本库的操作: 查看历史版本: >: git log >: git reflog 查看时间点之前|之后的日志: >: git log --after 2018-6-1 >: git log --before 2018-6-1 >: git reflog --after 2018-6-1 >: git reflog --before 2018-6-1 查看指定开发者日志 >: git log --author author_name >: git reflog --author author_name 回滚到指定版本: 回滚到上一个版本: >: git reset --hard HEAD^ >: git reset --hard HEAD~ 回滚到上三个版本: >: git reset --hard HEAD^^^ >: git reset --hard HEAD~3 回滚到指定版本号的版本: >: git reset --hard 版本号 (重点) >: eg: git reset --hard 35cb292 """ 过滤文件 """ # .gitignore 文件 # 1)在仓库根目录下创建该文件 # 2)文件与文件夹均可以被过滤 # 3)文件过滤语法 过滤文件内容 文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤 /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤 eg: a.txt:项目中所有a.txt文件和文件夹都会被过滤 /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤 /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤 *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符) 空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件) """ 分支操作 """ 1.创建分支 >: git branch 分支名 2.查看分支 >: git branch 3.切换分支 >: git checkout 分支名 4.创建并切换到分支 >: git checkout -b 分支名 5.删除分支 >: git branch -d 分支名 6.查看远程分支 >: git branch -a 7.合并分支 >: git merge 分支名 把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令 1)多个开发者都是在一个分支上进行开发,不出意外,该分支一定叫dev(协同开发) 2)如果出现一个特殊任务(敏感任务),与正常业务关系不紧密,甚至可能大的影响正常的dev分支开发,可以依赖dev开一个子分支,进行开发,开发完毕后合并到dev分支,再删除该分支即可 3)所有的开发任务都可以在dev分支上进行(除非公司硬性要求不能直接在dev分支开发,只能在dev子分支开发,测试通过后才能合并给dev) """ 两种本地与远程仓库同步 """ 1)你作为项目仓库初始化人员: 线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push) 2)你作为项目后期开发人员: 远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发 """ remote源操作 """ 1)查看仓库已配置的远程源 >: git remote >: git remote -v 2)查看remote命令帮助文档 >: git remote -h 3)删除远程源 >: git remote remove 源名 eg: git remote remove origin 4)添加远程源 >: git remote add 源名 源地址 >: git remote add orgin git@gitee.com:doctor_owen/luffyapi.git 5)提交代码到远程源 >: git push 源码 分支名 6)克隆远程源 >: git clone 远程源地址 1)通过克隆方式连接远程源,默认远程源名就叫origin;所以主动添加远程源来连接远程仓库,源码也用origin 2)本地一个仓库只需要和远程一个源进行同步,所以只需要连接一个远程源,如果还想把本地代码同步给第三个平台,那么可以通过主动添加远程源来连接第三个平台的远程仓库,此时的源码就不能再叫origin了,比如online都可以 3)pull和push都可以提供选择不同的源码,和不同的远程仓库交互 """ 采用ssh协议连接远程源 """ 官网:https://gitee.com/help/articles/4181#article-header0 本机命令,生成公钥:ssh-keygen -t rsa -C "*@*.com" 邮箱可以任意填写 本机命令,查看公钥:cat ~/.ssh/id_rsa.pub 码云线上添加公钥:项目仓库 => 管理 => 部署公钥管理 => 添加公钥 => 添加个人公钥 """ 提交本地代码到远程仓库 """ 命令:git push origin master """ 如何成为其他码云项目的开发者 """ 1)生成自己电脑的公钥,配置到自己的码云个人公钥中 2)把自己的码云用户名提供给别人,别人添加你成为项目开发者 3)自己确认添加,成为开发者,克隆开发项目,进行开发 """ 如何成为公司自建git服务器的开发者 """ 1)生成自己电脑的公钥(公钥生成一次就可以了),把它提交给项目管理者 2)项目管理者添加你公钥,加入开发者,提供给你项目克隆地址 3)克隆开发项目,进行开发 """ 协同开发 """ 1)作为开发者,第一次同步项目(前台已经是项目开发者了) >: git clone 项目地址 2)保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建) 3)本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互 4)交互顺序:必须 先拉(pull)后提(push) 5)必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互 >: git checkout dev >: git add . >: git commit -m '本次提交的信息提示' >: git pull origin dev >: git push origin dev """ 冲突解决 """ 1)在远程仓库和本地仓库版本不一致时,拉取远程仓库版本到本地时,两个版本进入融合,可能会出现版本冲突 2)定位冲突文件冲突代码,线下沟通冲突代码,整合代码解决冲突 3)将解决冲突后的代码重新提交到本地版本库 4)再拉去远程仓库,直到没有冲突,提交本地版本库到远程 """ """ <<<<<<< HEAD # 冲突的开始 # 自己的代码 ======= # 分割线 # 别人的代码 >>>>>>> b63c408abd05b87fc492d40523240561999dba50 # 冲突的结束(版本) """ """ 1)删除冲突相关标识:冲突的开始、分割线、冲突的结束(版本) 2)线下沟通,根据实际需求完成代码整合 3)测试整合后的代码 """ """ 出现冲突的前提: 1)不同开发者同时操作了同一文件 2)并且在相同行写了代码 强调:有业务交际时,版本合并不一定会出现冲突相关的标识,但是可能会带着代码运行崩溃,所有理论上每一次版本合并,都要测试合并后的所有功能(及其之少的情况) """ 远程仓库回滚 """ 用dev分支举例 1)本地切换到远程要回滚的分支对应的本地分支 git checkout dev 2)回滚本地分支 git reset --hard 版本号 3)本地版本强行提交给服务器 git push origin dev -f """
git
一、git介绍
Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。 Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,安装参见:http://git-scm.com/
GitHub是一个基于Git的远程文件托管平台(同GitCafe、BitBucket和GitLab等)。
Git本身完全可以做到版本控制,但其所有内容以及版本记录只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要结合GitHub来使用。使用场景:
- 无GitHub:在本地 .git 文件夹内维护历时文件
- 有GitHub:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库
- 集中式:远程服务器保存所有版本,用户客户端有某个版本
- 分布式:远程服务器保存所有版本,用户客户端有所有版本
1、Git把管理的文件分为了两个区域四个状态。
工作区(workspace):当前开发程序所在目录称为工作区,即:工作开发都是在该目录,该区域的文件会有状态的变化且状态由git自动检测,如果程序中文件做任何操作(增、删、改),文件状态均会被检测到,可以使用 【git status】命令查看。
版本库:工作区检测到有文件发生变化,那么意味着较上一个版本之后对程序进行了修改,修改完成之后,可以当做下一版本进行提交,那么就是执行 【git add .】 将所有文件提交到暂存区(index/stage/cached),然后再执行【git commit -m '又一个版本'】提交到版本库的分支即可,之后可以使用【git log】命令查看版本记录。
- 工作区有一个隐藏目录
.git
,这个不算工作区,而是Git的版本库。 - Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支
master
,以及指向master
的一个指针叫HEAD
。 - 前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
- 第一步是用
git add
把文件添加进去,实际上就是把文件修改添加到暂存区; - 第二步是用
git commit
提交更改,实际上就是把暂存区的所有内容提交到当前分支。 - 因为我们创建Git版本库时,Git自动为我们创建了唯一一个
master
分支,所以,现在,git commit
就是往master
分支上提交更改。 - 你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
- Git的四个区域:工作目录(Workspace)-->暂存区域(Index/Stage/Cached)-->本地仓库(Repository)-->远程仓库(Remote)Git命令就是用于将文件改动切换到不同的空间来记录
- Git的四种状态:Untracked--> Unmodified--> Modified-->Staged
2、基础命令
- git init,初始化,表示即将对当前文件夹进行版本控制。
- git status,查看Git当前状态,如:那些文件被修改过、那些文件还未提交到版本库等。
- git diff index.html,查看此文件在本地工作目录和暂存区的区别。
- git diff --cached index.html,查看此文件在暂存区和本地仓库的区别。
- git add 文件名,将指定文件添加到版本库的暂存状态。
- git add . 把当前目录下所有改动的文件都添加到版本库的暂存状态。
- git commit -m '提交信息',将暂存区的文件提交到版本库的分支也就是本地仓库。只有将文件提交到本地仓库,git才真正的对文件实现了管理
- git log,查看提交记录,即:历史版本记录
- git log -p,更详细的历史版本记录
- git log -1,显示最近一条
- git log --oneline,记录显示成一行
- $ git log --oneline --decorate,记录显示成一行,还可以看到分支
- git reflog,查看每一次命令
- git reset --hard 4459657,回滚
- git checkout -- index.html,用暂存区的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
- git reset HEAD index.html,用本地仓库版本替换暂存区的版本
- git rm index.html,git commit -m "remove index.html"从版本库中删除该文件
- git rm --cached index.html"从暂存区删除,可以理解成git add index.html 的反命令
- git rm -f index.html"从暂存区和本地工作目录中同时删除
- git mv index.html home.html"从暂存区和本地工作目录中同时改名为home.html
- git config --local user.name 'silencio9'
- git config --local user.email '343096080@qq.com'
二、分支管理
branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。
1、创建与合并分支
2、解决冲突
3、基本命令
- git branch 分支名称 创建分支
- git checkout 分支名称 切换分支
- git branch 查看所有分支
- git branch -d 分支名称 删除分支
- git merge 分支名称 将指定分支合并到当前分支
git remote
查看远程库的信息git remote -v
显示更详细的信息
4、分支
-
master
分支是主分支,因此要时刻与远程同步; -
dev
分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步; -
bug分支只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
-
feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
5、标签
- git tag -a v1.0 当前内容打一个标签(方便快速回滚),每次提交都可以打个tag
- git tag -a v1.0 aa27de7 给aa27de7内容打一个标签(方便快速回滚)
- git reset --hard v1.0 回滚到v1.0版本
- git tag 查看当前所有的标签
- git show v1.0 查看当前1.0版本的详细信息
- git tag -a v1.2 -m "version 1.2 release is test" 创建带有说明的标签,-a 指定标签名,-m 指定说明文字
- git tag -d 1.0 为同一个提交版本设置了两次标签,删除之前的v1.0
三、远程仓库
1、创建SSH Key
本地Git仓库和GitHub仓库之间的传输是通过SSH加密的
第1步:创建SSH Key,一路回车,使用默认值即可。
1
|
$ ssh -keygen -t rsa -C "youremail@example.com" |
找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。
第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub
文件的内容: 最后点“Add Key”,你就应该看到已经添加的Key
- 为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。
- GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。
- 提示:在GitHub上免费托管的Git仓库,任何人都可以看到喔(但只有你自己才能改)。所以,不要把敏感信息放进去。
- 如果你不想让别人看到Git库,有两个办法,一个是交点保护费,让GitHub把公开的仓库变成私有的,这样别人就看不见了(不可读更不可写)。另一个办法是自己动手,搭一个Git服务器,因为是你自己的Git服务器,所以别人也是看不见的,公司内部开发必备。
2、创建远程仓库
你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作。
第1步:登陆GitHub,然后,在右上角找到“New repository”按钮,创建一个新的仓库:
第2步:$ git remote add origin git@github.com:silencio9/blog.git #添加远程仓库
第3步:git push -u origin master # 推到远程
以后:git push origin master #以后只要本地作了提交,此命令就可以推到远程库
3、从远程库克隆
假设我们从零开发,没有本地库那么最好的方式是先创建远程库,然后,从远程库克隆。
第1步:登陆GitHub,创建一个新的仓库,名字叫gitskills
勾选Initialize this repository with a README,这样GitHub会自动创建一个README.md文件:
第2步:$ git clone git@github.com:silencio9/gitskills.git #在本地找一个目录,克隆远程库 或者 $ git clone https://github.com/silencio9/gitskills.git
- GitHub给出的地址不止一个,还可以用https://github.com/silencio9/gitskills.git这样的地址。Git支持多种协议,默认的
git://
使用ssh,但也可以使用https
等其他协议。 - 使用
https
除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh
协议而只能用https
。
4、基础命令
- $ ssh-keygen -t rsa -C "youremail@example.com",创建SSH Key。
- $ git remote add origin git@github.com:silencio9/blog.git # 为地址起一个别名origin 或者 $ git remote add origin https://github.com/silencio9/blog.git
- $ git push -u origin master #将本地master分支内容以及版本信息推送到GitHub
- $ git push origin dev # 将本地dev分支内容以及版本信息推送到GitHub
- $ git clone git@github.com:silencio9/gitskills.git #在本地找一个目录,克隆远程库 或者 $ git clone https://github.com/silencio9/gitskills.git
- $ git Branch # 默认获取到得只有master分支
- $ git branch dev origin/dev # 创建dev分支且和远程dev分支同步
- $ git checkout dev # 切换到dev分支
- $ git pull origin dev # 从远程GitHub仓库获取dev分支最新内容,并合并到本地
- $ git fetch origin dev # 从GitHub仓库获取dev分支最新内容到版本库的分支
- $ git merge origin/dev # 将版本库的分支内容合并到工作区
- 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】
四、多人协作
1、合作者
将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码。
2、组织
创建一个组织,然后再该组织下可以创建多个项目,组内成员可以向组内所有项目提交代码。PS:也可以对某个项目指定合作者
3、三人协同开发整个过程
- 创建程序
- 用户A创建程序,提交到GitHub
- 用户B克隆项目
- 用户C克隆项目
- 开发功能
- 用户A开发功能1
- 用户B开发功能2
- 用户C开发功能3
- 提交
- 用户A提交功能1,并push(A用户手速快,先提交。)
- 用户B提交功能2,无法push,因为GitHub上已经有其他人提交的新代码。
解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能2。 - 用户C提交功能3,无法push,无法提交,因为GitHub上已经有其他人提交的新代码。
解决方法:从GitHub上获取最新代码并合并到本地,提交自己开发的功能3。 - 获取最新代码
- 用户A获取最新代码
- 用户B获取最新代码
- 用户C获取最新代码
在上面红色标注的解决方法位置可以有三种方式操作,三者都可以完成合并并提交新功能,但是日志记录会有差异,如:前两者版本记录中会出现合并,而第三种可以保证版本记录干净整洁。
- 先 git pull origin master 然后 git push origin master
- 先 git fetch origin master 然后 git merge origin/master 再 git push origin master
五、fork
- fork一下,然后这个项目就在自己仓库出现了
- 从自己仓库获取代码并进行编辑提交
- 创建并提交一个pull request,然后等待原作者是否同意这个pull request,如果同意那么在作者的源代码中就推出现小P提交的功能
################## cd blog #进入程序目录 git init #git 初始化 git status #查看当前状态 git add . #工作区提交到暂存区 git commit -m 'v1' #提交到版本库,并填写版本说明,以便以后回滚 #修改文件后 git diff #查看修改了什么地方 #回滚 git log #查看历史版本提交记录根据版本commit值可以进行回滚 git reflog #记录每一次命令 git reset --hard 版本号 #回滚 #撤销: 情况1:没有add git checkout -- index.html #工作区的修改全部撤销 情况2:已经add了,但没有commit 第1步:git reset HEAD index.html #把暂存区的修改撤销掉 第2步:git checkout -- index.html #删除: 情况1:误删除的这样找回 git checkout -- index.html 情况2:彻底删除 第1步:git rm 1.txt 第2步:git commit -m 'del 1.txt' #分支:默认在master分支 cd blog git branch dev #创建新分支,即拷贝一份当前所在分支代码到新分支 git checkout dev #切换到dev分支 git branch #查看当前分支 git branch -d 分支名称 #删除分支 git checkout master #切换回master分支 git merge dev #将dev分支内容合并到master分支 切换分支再合并 #遇到bug: git checkout master #切换回master分支 git branch bug #创建bug分支 git checkout bug #切换到bug分支 git add . git commit -m '修bug' git checkout master #切换回master分支 git merge bug #将bug分支内容合并到master分支,表示bug修复完毕,可以上线 git checkout dev #切换回dev分支,继续开发, ... git add . git commit -m '开发完毕' git checkout master #切换回master分支 git merge dev #将dev分支内容合并到master分支 ##产生冲突 CONFLICT(content):Merge conflict in ... 手动解决冲突 git add. git commit -m '解决bug和新功能冲突' ############SSH Key ssh-keygen -t rsa -C "youremail@example.com" #创建SSH Key,一路回车即可 git remote add origin git@github.com:silencio9/blog.git # 添加远程仓库(起一个别名origin) 或者 git remote add origin https://github.com/silencio9/blog.git #出现fatal:remote origin already exists.的解决方案 第1步:git remote rm origin 第2步:git remote add origin git@github.com:silencio9/blog.git # 添加远程仓库 git push -u origin master #master分支推到远程 (-u可加可不加) git push -u origin dev #dev分支推到远程 (-u可加可不加) # 第一次推会出现:Are you sure you want to continue connecting(yes/no)? 输入yes git push origin master #只要本地做了提交,就可以通过此命令推到远程 #公司 克隆远程库: cd e: git clone https://github.com/silencio9/blog.git(内部已实现git remote add origin 远程仓库地址) git checkout dev #切换回dev分支,继续开发, git merge master #让dev分支合并master [] ... git add . git commit -m '在公司开发的a.txt' git push origin dev #提交到远程 #回到家继续写代码 git checkout dev # 切换到dev分支 git pull origin dev # 从远程dev分支拉取代码 ... git add . git commit -m '在家开发的b.txt' git push origin dev #提交到远程 #到公司继续 git pull origin dev # 从远程dev分支拉取代码 ... git add . git commit -m '开发完毕' #上线 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 ##################rebase###################### rebase:使git记录简洁【不要把push到仓库的也合并】 多个记录整合成一个记录 ####情况1: git rebase -i 版本号 git rebase -i HEAD~3 ####情况2:dev分支变基: 第1步.git checkout dev 第2步.git rebase master 第3步.git checkout master 第4步.git merge dev 第5步.git rebase -i 版本号 ####情况3:忘记提交到远程仓库 git fetch origin dev #远程到版本库 git rebase origin/dev #版本库到工作区 ####rebase冲突,和merge冲突一样的解决方式,最后加上git rebase --continue git rebase master ... git add . git rebase --continue git log ####################################### git pull origin dev #会产生分叉 等同于 git fetch origin dev #远程到版本库 git merge origin/dev (分叉)或 git rebase origin/dev (不分叉)#版本库到工作区 git log --graph #图形显示 git log --graph --pretty=format:"%h %s" #图形简洁显示 ######快速解决冲突 1.安装beyond compare 2.在git中配置 git config --local merge.tool bc3 git config --local mergetool.path 'D:\bcomp' git config --local mergetool.keepBackup false 3.应用beyond compare解决冲突 git mergetool ##### git tag -a v1 -m '第一版' #打标签 git push origin --tags #推送 ###########多人协同开发 在dev分支上新建分支 #开发成员 git checkout dev git checkout -b bubu #创建bubu分支并切换到bubu分支 ... git add . git commit -m 'bubu开发完毕' git push origin bubu ###########代码review(pull request) 给master和dev分支添加rule ##远程仓库 bubu: New pull request bubu分支--->dev分支 ... #测试人员 git checkout dev git checkout -b release git push origin release ##远程仓库 release: New pull request release分支--->master分支 ##本地 git checkout dev git merge release git branch -d release ##master分支 git checkout master git pull origin master git tag -a v2 -m '第2版' #打标签 git push origin --tags #推送 ##给开源软件贡献代码 1.fork源代码 将别人源代码拷贝到我自己的远程仓库 2.在自己的仓库进行修改 3.给源代码的作者提交修复bug的申请 pull request ##其他 配置文件 1.项目配置文件:项目/.git/config git config --local user.name 'bubu' git config --local user.email '343@qq.com' git remote add origin 地址 默认添加到本地配置文件中 2.全局配置文件: ~/.gitconfig 当前用户的家目录下 git config --global user.name 'bubu' git config --global user.email '343@qq.com' 3.系统配置文件:/etc/.gitconfig 需要有root权限的 git config --system user.name 'bubu' git config --system user.email '343@qq.com' ##免密登录: 1.URL中体现(在项目配置文件中修改) 原来的地址:https://github.com/wupeiqi/dbhot.git 修改的地址:https://用户名:密码@github.com/wupeiqi/dbhot.git git remote add origin https://用户名:密码@github.com/wupeiqi/dbhot.git git push origin master 2.SSH实现 A:生成公钥和私钥(~/.ssh/id_rsa.pub) ssh-keygen -t rsa -C "youremail@example.com" B:拷贝公钥的内容,并设置到GitHub中 git remote add origin git@github.com/wupeiqi/dbhot.git 3.git自动管理凭证 ##git忽略文件(让Git不再管理当前目录下的某些文件) 以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录; *.h !a.h 排出 .gitignore files/ ##任务管理相关 issues 文档以及任务管理 wiki 项目文档说明描述
# Byte-compiled / optimized / DLL files .idea/ local_db.sqlite3 __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python build/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ pip-wheel-metadata/ share/python-wheels/ *.egg-info/ .installed.cfg *.egg MANIFEST # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .nox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *.cover *.py,cover .hypothesis/ .pytest_cache/ cover/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py db.sqlite3 db.sqlite3-journal # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder .pybuilder/ target/ # Jupyter Notebook .ipynb_checkpoints # IPython profile_default/ ipython_config.py # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: # .python-version # pipenv # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. # However, in case of collaboration, if having platform-specific dependencies or dependencies # having no cross-platform support, pipenv may install dependencies that don't work, or not # install all needed dependencies. #Pipfile.lock # PEP 582; used by e.g. github.com/David-OConnor/pyflow __pypackages__/ # Celery stuff celerybeat-schedule celerybeat.pid # SageMath parsed files *.sage.py # Environments .env .venv env/ venv/ ENV/ env.bak/ venv.bak/ # Spyder project settings .spyderproject .spyproject # Rope project settings .ropeproject # mkdocs documentation /site # mypy .mypy_cache/ .dmypy.json dmypy.json # Pyre type checker .pyre/ # pytype static type analyzer .pytype/ # Cython debug symbols cython_debug/ # static files generated from Django application using `collectstatic` media static