git 开发操作流程,详解

570 阅读9分钟

git

  • git 分布式管理系统

git 本地操作

  1. 不停地创造文件进行备份(没有修改提示),git可以帮我们管理代码,保证代码不丢失
  2. 记录历史只要提交到git上就永久不会丢失,可以随时"穿越"
  3. 团队协作, 两个人同事修改文件同一行(不是每一行),需要手动接触冲突,其他可以实现自动合并(如果是模块化,组件化开发,这是最好的互不影响的模式)
  4. 强大的分支管理系统
  5. 多端共享 pc ios andriod
  6. 速度比svn快
  7. 有个单独的.git文件夹
  8. 有工作区, 暂存区, 历史区

  • svn 集中式管理系统
  1. 需要一台中央服务器
  2. 每个文件夹都有.svn的文件

git安装

windows got-scm.com 下载安装 mac 如果安装过xcode 自带git,homebrerw是mac的包管理器(我们可以安装插件更改界面http://ohmyz.sh/ + http://www.iterm2.com/)

配置用户(第一次使用需要进行配置的)

可以通过 git config --list 来判断有没有进行配置,如果配置会出现user.email email, user.name name的字段

如果没有需要手动简历链接,命令分别是:

git config --global user.name "yourname"
git config --global user.email "youremail"

linux命令

刚刚cmd打开的管理器,我们用的dos命令,但是在git bash here我们用的是linux命令,这一点我们要区分,下面我们用linux命令进行初始化git

初始化git git init (告诉那个文件夹被git管理)

正常我们在文件下打开git,目录显示正常,但是在初始化git init 之后会初始化目录,且将当前目录作为主分支,该目录下后面会跟加一个(master)的字段,代表初始化成功,此时不存在分支主干的说法,必须在提交之后才会看见分支,不允许嵌套

移除git对该问价夹的管理

我们只需要 删除该目录下的.git 文件 rm -rf .git,执行之后,目录上的(master)就会消失

需要注意的是rm -rf是永久删除,不可恢复,所以需要谨慎使用

其他命令

pwd print working directory 打印工作日志
rm 文件名 删除文件
mkdir 创建文件
cd 目录名 进入某个目录
ls 查看该目录下的文件
ls -al 查看该目录下的文件(包括隐藏文件)
cat love.txt 查看文件内容
touch 文件名.后缀  创建空文件
each hello > love.txt  向文件夹追加输入 hello
vi 文件名.后缀   编辑文件
i:插入模式 esc退出编辑者模式  q!强制退出 :wq 保存并退出
each hello > love.txt  向文件夹输入 hello
mv my-my ~/Desktop 把my-my移动到桌面

  • 退出vim编辑器的方法及区别

当文本编辑结束之后,通常需要退出编辑器。退出编辑器又分为4种情况:保存退出、正常退出、不保存退出及强制退出,请参考jingyan.baidu.com/album/495ba…

提交到历史区(不是github)

我们说git有有工作区, 暂存区, 历史区三个区,但是工作区不能直接提交到历史区,我们在提交之前首先要认识自己在哪个区git status(git的提示很不错的)

目录红色代表工作区,绿色代表暂存区 ,图片提示我们可以通过git add .,git add -a,git add 文件名称来提交到暂存区,提交之后就变为绿色

  • 到暂存区后,如果想删除暂存区的东西,我们用git rm --cached . -r (-r 是递归, --cached 表示暂存区)退出暂存区
  • 提交到暂存区后提交到历史区,用git commit -m"提交信息" 提交之后就会生成版本号

  • 我们可以用 git log查看版本号(自下而上),最上面的是最新的

撤销,回滚

  1. 比较文件 git diff 默认是工作区和暂存区比(也可以工作区和历史区,或者历史区和暂存区)
  • git diff 工作区和暂存区比
  • git diff master 工作区和历史区
  • git diff --cached 历史区和暂存区

  1. 从暂存区将工作区内容覆盖掉 git checkout love.txt 但是不能在返回了,
  2. 假设已经提交到暂存区, 我们可以用$ git reset HEAD love.txt 让暂存区倒退,在执行2 返回
  3. history > 1.txt 将历史记录导入到文件里
  4. 如果提到历史记录,那么永远不会丢,之前我们不能将工作区的直接提交到历史区,但是只要提交过一次,第二次就可以直接提交到历史区,原理还是会走到暂存区,只不过是快捷方法而已git commit -a -m"third"
  5. 当我们需要从历史区回滚到某个版本 git reset --hard 版本号 会那回滚的版本库去覆盖掉工作区和暂存区,那么要从以前回过来呢?
  6. git reflog可以打印出所有记录 git reset --hard 版本号 可以回滚和穿越了
  7. 往上走一次用git reset --hard HEAD^

分支

我们开发一定是多人共同开发,但是不可能是第二个人提交的版本覆盖第一个人的版本,我们需要建立分支,最后合并代码.

  1. 看目前有几个分支(*代表当前在哪儿个分支上) git branch 查看分支
  2. 创建分支 git branch dev
  3. 切换分支 git checkout dev
  4. 删除分支 git branch -D 分支名 不能删除当前分支
  5. 创建并切换分支 git checkout -b dev ( 刚创建分支的时候,分支marster属于同一个空间,除非分支已经commit了)
  6. 当改了dev文件的时候,将不能切换分支,必须提交更改,或者在没有没交之前暂存文件,暂存文件 git stash 暂存是使用过渡区覆盖工作区(危险)

  1. 想还原暂存的内容 git stash pop
  2. 分支合并git merge dev

遇到冲突时,只能手动解决,留下想要的结果,再次提交,使用gitgroph显示合并信息

远程仓库

sourceTree免费管理git的工具 在本地推给别人,我们需要一个平台github,,,只有历史区才能推到历史区的结果

  1. github账号
  2. fork复制
  3. 在当前项目创建READEME.md
# 项目说明
---

## 技术栈
---
* es2015
* React
* React-Router
* Redux
* babel
* node

## 目录说明
---
* src 源代码所在目录
    * module 业务代码
        * demo 各种react样例
    * resource 资源文件
        * css 公共css
* .babelrc babel配置文件 push代码方式,没必要做重复劳动
* ...

## 启动服务
---
* `make server|edp webserver start` 启动本地服务
* 本地调试
## 多人开发模式
---
同一时间多人开发,按人创建分支,分支按照分支的命名规范。
### 提测
提测时间点有交叉的,统一merge到`test`分支,不要构建自己分支,不然会覆盖其他人功能
### 上线  
### ***`说明:`***
* 删除本地test分支
* 删除远程test分支

## 其他
---
* dev环境地址:http://dev-
* tes环境地址:http://test-
* test环境部署地址: http://
* IDE,建议使用Visual Studio Code,或者使用Sublime Text,安装基础插件

## 人员
---
amily
  1. git init 初始化项目
  2. git status git add 注意 只要我们用webstorm编辑文件,就会出现.idea的文件夹
  3. 建立一个文件 .gitignore (配置文件)忽略我们不想要提交的内容 类似于npm.ignore
.idea
node_modules
.Ds_store(mac)
...
  1. git不会上传空文件夹
  2. 添加.gitkeep在空文件夹内
  3. 建立新仓库
  4. 将代码拉到本地 git pull
  5. git remote add 名称 地址 添加远程仓库
  6. git push -u 名称 master (-u 会记住往origin master 提交)
  7. git remote -v 列出详细信息,在每一个名字后面列出其远程url,显示对应的克隆地址:
  8. 删除 git remote rm 名字

拉取最新线上代码

pull相当于 git fetch + git master 关联远程仓库之后我们需要把代码推上去 git push origin(名称) master(分支), 第一次需要输入用户名,第二次密码(暗文) 仅第一次需要 提交之后 (如果.idea也提交上去了,我们关掉webstorm , rm -rf .idea删掉,然后在提交就好了) 前提是线上课线下的不一样,我们需要先git pull origin master

如果报以上错说明我们需要合并线上代码 esc + :wq就可以了,此时我们会多一条日志,然后直接推送

如果报以上错,说明冲突,需要更改解决冲突在提交代码,在push

代码fork-pull-request

在Edit上添加 description , website 线上网址
一般我们会建立一个gh-pages分支来发布我们的静态页

  1. 在项目中创建gh-pages分支 git checkout-b gh-pages
  2. 将分支提到仓库 git add . git conmit -m"" git push origin gh-pages(放静态文件,不能放服务器,不能放数据库)
  3. 找到提供的网址 在settingsGitHub-Pages
  4. 通过搜索找到人格github 在users找到个人,可以follow,可以看到这个人的活跃度 5.更改别人代码 可以fork在当前项目下克隆一份,如果代码更新,不会随之更新,然后拉取到本地git clone 地址 别名 git remote -v检查,默认就是git仓库地址,而且有origin地址,可以将代码提交到自己的仓库上,
  5. 提交到git上之后,由于自己仓库地址和该项目仓库地址是fork关系,执行new pull request会将自己的代码推给对方,create pull request创建
  6. 对方接收到之后红色是fork的,绿色是本地的close pull request拒绝merge pull request同意
  7. issue可以提交对项目的质疑

我们自己开发的时候也要这样吗?在setting里面有贡献者,可以把项目免费开给这些人,collabrators添加贡献者,对方需要确认,被添加的人拥有最大权限,copy invitelink拷贝邀请链接,一接收,项目就可以直接操作了.

界面操作

GUI 我们希望以鸡肉面的姓氏操作我们的git仓库,git clone 地址 别名 vcs第二行,点下弹框,选git勾选上,在点右键会出现git属性

git里面有许多命令,可以直接选择

可能会遇见的问题

想重新配置git config

git Authentication failed解决办法

https help.github.com/articles/ge…

help.github.com/articles/wo…

密码是自己中间设置的密码哦!

iterm2 + schemes/zsh

schemes下载压缩包 ,配置item2 的preferences zsh