一、正常提交版本分支
1、启动
直接在文件夹内右键,出现两个选项,一般使用Bash命令端
2、进入命令端后init初始化该文件夹,之后会在该文件夹下自动生成一个.git文件夹,它用于管理这个文件夹的所有版本管理
git init
3、git add添加文件进行暂存状态
git add filename # 添加指定文件 git add . # 添加当前目录下,以及子目录下的文件
4、status查看文件是否在管理状态或者有被改动
1)、在暂存状态下,并且未被修改,文件显示绿色
2)、不在暂存状态下,或者暂存状态下文件被修改,文件状态显示红色,此时需要重新add进行更新
5、真正进行提交版本,将文件添加到版本库的分支
git commit -m ‘版本描述’
1)、第一次使用需要配置邮箱和用户名
2)、配置完后再将文件添加到版本库的分支
6、查看提交记录,即:历史版本记录
至此一个版本已经建立完成。
二、几种回滚
1、修改过的内容回滚到原内容
git checkout “文件名”
2、版本分支回滚到暂存状态
get reset --soft 版本号
3、将暂存状态回滚到非暂存状态(工作区):不常用
git reset head 文件名
4、将版本分支回滚到非暂存状态:不常用
git reset --mix 版本号
5、将当前版本分支回滚到任意版本分支
git reflog # 先获取版本记录 git reset --hard 版本号
三、上线版本出现bug,需要立即进行处理。而此时新需求开发到一半,这时该怎么办。
方案1:stash,将新需求已经开发的部分存放到另外一个地方。
git stash # 将已经开发到一半的新需求暂存起来
git status # 此时已经回到版本分支最初状态,开始修复bug
git add . # bug 修复完成,将修复完的代码添加到暂存状态
git commit --m "版本描述:修复bug" # 将修改bug后的版本提交到版本分支
git stash pop #将开发到一半的需求再拿回来
修复bug时,覆盖了暂存起来的代码。当你把暂存起来的代码拿出来,此时会让你一 一手动选择
stash相关常用命令:
git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
git stash list 查看“某个地方”存储的所有记录
git stash clear 清空“某个地方”
git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
git stash drop 编号,删除指定编号的记录
方案2:branch(常用)
默认分支为master,该分支一般不会在上面操作,主要用于存储上线版本。使用命令创建另外一个分支,在分支下进行开发,一般修改bug在一个分支,开发在一个分支,协同开发另建分支,最后合并到master
创建分支:
git branch dev #创建dev分支
git checkout dev #进入到dev分支
进入到dev分支后,开始正常开发,开发完成新的需求后创建版本分支,此时master并不会受到影响,回到master分支后,内容还是开发新需求之前的内容。如果需要将dev分支上的新需求上线,此时可以将dev合并到master。
git checkout master # 首先需要将分支切换到需要合并至的分支 git merge dev # 将dev分支合并至master
处理bug也是一样,先在上线版本分支下进行创建分支bug,处理完bug后合并即可
注意:git merge 合并时也可能会出现冲突,解决冲突的方式上述stash相同,即:找到冲突文件,手动修改冲突并提交
branch常用命令:
git branch 分支名称 创建分支 git checkout 分支名称 切换分支 git branch -m 分支名称 修改分支名称 git branch 查看所有分支 git branch -d 分支名称 删除分支 git merge 分支名称 将指定分支合并到当前分支
github:
结合github远程仓库,将代码上传至远程仓库,实现异地无缝衔接开发
1、创建github账户
2、创建仓库
3、通过git将项目上传至仓库,会弹出登录页面让你进行登录github账户
git remote add origin https://github.com/AikeCool/bbs.git #为仓库地址取名为origin git push -u origin master # 将本地master分支内容以及版本信息推送到GitHub
4、还可以将其它分支上传至仓库,因为真正开发一般都是在其他分支,例如dev,所以需要将dev分支上传至远程仓库
git push -u origin dev #将dev分支上传至远程仓库
5、上传至远程仓库,主要用于异地无缝衔接开发,假如远程仓库是在公司创建的,我们在家中如何进行开发呢?
第一次在家中进行开发:
1)、将上传至远程仓库的文件克隆下来
git clone https://github.com/AikeCool/bbs.git # 克隆,默认只能取到master分支
2)、因为真正开发都是在dev分支,所以需要从服务器上取到它
git branch dev origin/dev # 创建dev分支且和远程dev分支同步
3)、切换至dev分支
git checkout dev # 切换到dev分支
这时就可以在本地进行开发了,开发完毕后,记得将项目添加到版本库的分支,并且上传至服务器,这样才能在不同的工作地点接着开发。
$ vim app01/views.py # 继续开发新功能 $ git add . # 添加文件到版本库的暂存状态 $ git commit -m '在家里开发的功能' # 提交新功能到版本库的分支 $ git push origin dev # 提交dev分支内容到远程GitHub托管仓库的dev分支
6、当家里开发的功能上传到远程仓库后,隔天回到公司该如何继续开发呢?
1)、切换到dev分支
git checkout dev # 切换到dev分支
2)、从远程仓库获取最新dev分支内容,并合并到本地
git pull origin dev # 从远程GitHub仓库获取dev分支最新内容,并合并到本地
3)、开始开发
vim app01/views.py # 继续开发新功能 git add . # 添加文件到版本库的暂存状态 git commit -m '在公司开发功能1' # 提交新功能到版本库的分支 git push origin dev # 将dev分支提交到远程仓库
7、继续在家中进行开发,但此时已经不是第一次在家里进行开发了
git checkout dev # 切换到dev分支 git fetch origin dev # 从GitHub仓库获取dev分支最新内容到版本库的分支 $ git merge origin/dev # 将版本库的分支内容合并到工作区 app01/views.py # 继续开发新功能 git add . # 添加文件到版本库的暂存状态 git commit -m 'xxxxxxxxxxx' # 提交新功能到版本库的分支
长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题
【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。
github协同开发:
- 合作者,将其他用户添加到仓库合作者中之后,该用户就具有向当前仓库提交代码。
- 组织,创建一个组织,然后再该组织下可以创建多个项目,组内成员可以向组内所有项目提交代码。PS:也可以对某个项目指定合作者
协同开发命令和以上步骤类似,此处就不再重新写代码,而是使用文件描述三人协同开发整个过程。
- 创建程序
- 用户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
先 git fetch origin master 然后 git rebase origin/master 再 git push origin master
使用Git之小P创业上市期
终于终于小P等到了公司上市实现财务自由,但作为一个技术屌还是脱离不了屌丝的本质,所以每天都是逛逛github,看看别人有什么好的项目,自己可以给他挑挑bug装装逼,但是别人不可能给小P搞成合作者什么的,那怎么才能给别人贡献代码呢?那就是fork了。。。。
- 找到想搞的项目,fork一下,然后这个项目就在自己仓库出现了
- 从自己仓库获取代码并进行编辑提交
- 创建并提交一个pull request,然后等待原作者是否同意这个pull request,如果同意那么在作者的源代码中就推出现小P提交的功能
其他补充
1. 配置文件
Git的配置文件有三个:
- 系统配置: /private/etc/gitconfig
- 用户配置: ~/.gitconfig
- 项目配置:.git/config
2. 用户凭证
由于Git和Github交互操作可能会很频繁,那么一定少了用户授权的操作,为了防止每次操作重复输入用户名和密码,Git提供了两种解决方法:
- 秘钥
首先创建一对秘钥 ssh-keygen -t rsa,然后将 id_rsa.pub (公钥)内容拷贝到github中,日后操作无需再输入用户名和密码。
注意:这种方式需要使用GIt中 git@github.com:WuPeiqi/xxxxx.git 格式地址。 - 密码
Https访问git时,避免每次操作需要输入用户名和密码,可以在配置文件中添加如下配置项:
[credential]
helper = store/cache/第三方
store:
表示将用户名和密码保存在硬盘上
第一次输入过用户名和密码之后,用户名和密码就会保存在当前用户根目录的 .git-credentials 文件中,内容格式为:https://用户名:密码@github.com自动添加配置命令:git config credential.helper store
cache:
表示将用户名和密码保存在缓存中
第一次输入过用户名和密码之后,用户名和密码就会保存在缓存中,默认超时时间是 900 秒,缓存相关文件保存在当前用户根目录的 git-credential-cache 中
自动添加配置命令:
git config credential.helper cache
git config credential.helper 'cache --timeout=300'相关操作:
清除缓存:git credential-cache exit
指定超时:
[credential]
helper = cache --timeout=300
注意:
这种方式需要使用GIt中 https://github.com/WuPeiqi/xxxx.git 格式地址。
指定用户名和密码: https://用户名:密码@github.com/wupeiqi/xxx.git
版本相关:
git tag -a v1.0 -m '版本介绍' 本地创建Tag git show v1.0 查看 git tags -n 查看本地Tag git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配 git tag -d v1.0 删除Tag git push origin :refs/tags/v0.2 更新远程tag git checkout v.10 切换tag git fetch origin tag V1.2 git push origin --tags git pull origin --tags git clone -b v0.1