- 第一阶段[无分支操作]
$ git init 初始化,开始管控文件夹
$ git status 查看当前文件夹状态
$ git add 文件名 对指定文件进行版本控制
$ git add . 对指定文件夹下的所有文件及子目录进行版本控制
$ git commit -m '提交详细的描述信息' 创建提交记录(版本)
$ git log 查看提交的记录
$ git reflog 查看所有的提交记录(包括回滚后)
$ git reset --hard 指定版本号 回滚至指定版本
- 第二阶段[创建分支进行操作]
遇到问题:代码出现bug需要暂停现有工作,进入fix bug状态
方案A:stash
使用stash暂时保存正在进行的开发工作,回到上次提交状态下开始fix bug,处理完bug问题后,再从‘暂存区’拿回开发到一半的代码继续开发(弊端:fix bug后的代码可能会和开发到一半的代码有重合,造成代码冲突。冲突只能根据自己的需求逐一修正)
$ git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态(帮助我们暂时存储已经开发了一些的代码,回过头来继续做其他事情,做完之后,再拿回来继续开发)
$ git stash list 查看“某个地方”存储的所有记录
$ git stash clear 清空“某个地方”
$ git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
$ git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
$ git stash drop 编号,删除指定编号的记录
方案B:branch
git默认只有master一个分支,当多功能同时进行时,则可以创建不同的分支,来分别承担各个功能的开发工作。等到各个功能开发完毕后,进行分支合并,合并到master主干上来。但git merge 时也可能会出现冲突,解决冲突的方式上述stash相同
$ git branch 分支名称 创建分支
$ git checkout 分支名称 切换分支
$- git branch -m 分支名称 创建并切换到指定分支
$ git branch 查看所有分支
$ git branch -d 分支名称 删除分支
$ git merge 分支名称 将指定分支合并到当前分支
- 第三阶段[使用GitHub代码仓库托管]
多设备同时开发时,可使用GitHub进行代码托管,在不同设备间进行代码同步
1.创建GitHub并将代码推到GitHub上
$ git remote add origin https://github.com/用户名/项目名.git 为地址起一个别名origin
$ git push origin master 将本地master分支内容以及版本信息推送到GitHub
$ Username for 'https://github.com': 输入GitHub用户名
$ Password for 'https://用户名@github.com': 输入GitHub密码
$ git push origin dev 将本地dev分支内容以及版本信息推送到GitHub
2.在其他设备上进行代码clone操作(设备首次代码拉取)
$ git clone https://github.com/用户名/项目名.git 将项目从GitHub中获取(注意:clone操作默认只获取master分支)
$ git branch dev origin/dev 创建dev分支且和远程dev分支同步
$ git checkout dev 切换到dev分支,然后继续开发工作
$ git push origin dev 将本地dev分支开发的代码推到远程GitHub托管仓库的dev分支
3.在其他设备上进行代码pull操作(设备已有代码情况)
$ git checkout dev 确保在dev分支上
$ git pull origin dev 从远程GitHub仓库获取dev分支最新内容,并合并到本地
其中- git pull origin dev实际上可拆分为
git fetch origin dev 从GitHub仓库获取dev分支最新内容到版本库的分支
git merge origin/dev 将版本库的分支内容合并到工作区
这两个命令。但是merge会造成dev分支出现分叉,而使用
git rebase origin/dev 保持提交记录的整洁性,保证分支整齐
-
第四阶段[多人协作开发]
1.添加合作者
在GitHub上多人协作开发的方式:
2.创建组织(也可以为某一个单独的项目创建组织)
多人协作开发可能会遇到的问题:
先提交代码的人正常push提交代码到GitHub,后提交的人无法push代码
$ git push origin dev
To https://github.com/用户名/项目名.git
! [rejected] dev -> dev (fetch first)
error: failed to push some refs to 'https://github.com/用户名/项目名.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
问题原因:GitHub上已经有其他人提交的新代码
解决办法:从GitHub上获取最新代码并合并到本地,然后提交自己开发的功能(前提:各自开发的功能无重叠,则可先pull远程代码,然后直接push自己的代码;若pull代码后出现冲突,则处理完冲突,再push提交代码)
合并代码建议:1、一起合并;2、确定合并时间
- 补充:
5.1 为项目创建版本tag:
$ git tag -a V版本号 -m '版本介绍' 本地创建Tag
$ git show V版本号 查看指定版本
$ git tags -n 查看本地Tag
$ git tag -l 'V版本号.*' 查看本地Tag,模糊匹配
$ git tag -d V版本号 删除指定Tag版本
$ git push origin :refs/tags/V版本号 更新远程tag
$ git checkout V版本号 切换tag
$ git fetch origin tag V版本号
$ git push origin --tags
$ git pull origin --tags
$ git clone -b V版本号
5.2 Git的三个配置文件:
- 系统配置: /private/etc/gitconfig
- 用户配置: ~/.gitconfig
- 项目配置:.git/config
5.3 用户凭证
由于Git和Github交互操作可能会很频繁,那么一定少了用户授权的操作,为了防止每次操作重复输入用户名和密码,Git提供了两种解决方法:
秘钥
首先创建一对秘钥 ssh-keygen -t rsa,然后将 id_rsa.pub (公钥)内容拷贝到github中,日后操作无需再输入用户名和密码。
注意:这种方式需要使用Git中 git@github.com:用户名/项目名.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/用户名/项目名.git 格式地址。
指定用户名和密码: https://用户名:密码@github.com/用户名/项目名.git
补充:
git branch -vv: 查看本地分支关联关系
git config --global user.name "Zzm":设置全局用户名
git config --global user.email "Zzm@foxmail.com": 设置全局邮箱
ssh-keygen -t rsa -C "Zzm@foxmail.com":生成git的ssh密钥对
git config --global credential.helper store:记住用户名密码(从https拉取)
git remote set-url origin https://git.hony.com/citymap/etl.git:将ssh源切换为https源
git remote set-url origin git@email:username/ProjectName.git:将https源切换为ssh源
git remote -v:查看当前的remote url