zoukankan      html  css  js  c++  java
  • 版本控制工具之git

    git存储区域详解

    命令快速总结

    初始化
    	git init			当前文件夹初始化
    代码提交
    	git add file/.		自动检测工作区修改的内容提交到暂存区
    	git status			查看当前文件夹工作区的状态:是否有内容修改
    	git commit -m '描述'	暂存区内容提交到仓库
    代码回滚
    	git checkout file				暂存区回滚到工作区
    	git reset --hard '版本号'		回滚到指定版本的工作区
    	git reset --soft '版本号'		将指定版本回滚到暂存区
    	git reset --mix '版本号'		将指定版本回滚到修改过的内容
    查看版本日志
    	git log						查看日志信息:	命令(版本号)	作者	时间	版本描述
    	git log --pretty=oneline	日志信息:版本号	版本描述
    	git reflog					日志信息:版本号缩写(7位)	HEAD(x)		命令	操作记录
    
    	注:git log: 若回滚到之前的版本,后面的版本将不会显示	git reflog会显示所有版本信息
    删除文件
    	rm file
    	git add/rm file
    	git commit -m 'delete'
    撤销删除操作
    	rm file
    	git checkout --file		回滚至修改前的状态
    
    	rm file
    	git add file
    	git reset HEAD file
    	git checkout --file		回滚至提交到暂存区前的状态
    	
    	rm file
    	git reset --hrad '版本号'	回滚至指定版本号

    第一阶段:基础命令

    1. 初始化

    git init 初始化,会生成一个.git文件, 所有版本信息都放在此文件
    
    查看当前文件夹的状态: git status
    
    编辑代码 ...

    2. 提交代码到暂存区 工作区 -> 暂存区

    git add src 把代码放入git 暂存区
    # git add . 提交所有修改的文件
    git status 此时刚才add文件变成了绿色

    3. 创建提交记录(版本) 暂存区 -> 仓库

    git commit -m '版本描述'	把代码从暂存区放在git仓库 stage->master
    git config --user.email 1271570224@qq.com
    git config --user.name zhangyafei
    git commit -m 'vue第一个版本'
    
    git status 此时已经为空,表示提交的所有文件已经放在了git仓库

    4. 修改代码:比如我修改了README.md

    git status 查看当前的代码状态
    发现刚刚修改的文件变为了红色

    5. 提交修改记录

    git add .
    git commit -m '修改README描述

    6.git log 查看git日志
    输出:命令(版本号),作者,时间,版本描述

    fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
    $ git log
    commit 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c
    Author: 张亚飞 <1271570224@qq.com>
    Date:   Wed Jan 23 10:47:56 2019 +0800
    
        完善README描述
    
    commit 7866d35d2af1691705047127a620ab293f29f8f8
    Author: 张亚飞 <1271570224@qq.com>
    Date:   Wed Jan 23 10:39:25 2019 +0800
    
        vue第一个版本

    7. git log --pretty=oneline
      输出:版本号,版本描述

    fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
    $ git log --pretty=oneline
    1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c 完善README描述
    7866d35d2af1691705047127a620ab293f29f8f8 vue第一个版本

    8. git reflog 查看所有版本操作
      输出:版本号 修改顺序(最近修改的在前)

    fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
    $ git reflog
    1cf1f43 HEAD@{0}: reset: moving to 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c
    7866d35 HEAD@{1}: reset: moving to 7866d35d2af1691705047127a620ab293f29f8f8
    1cf1f43 HEAD@{2}: commit: 完善README描述
    7866d35 HEAD@{3}: commit (initial): vue第一个版本

    9. 回滚操作

    • git reset --hard HEAD^ 把把版本号回滚至上一个
    • git reset --hard 指定版本号(太长的可以写前六位) 回滚至指定的版本
    $ git reset --hard 7866d35d2af1691705047127a620ab293f29f8f8
    HEAD is now at 7866d35 vue第一个版本
    
    $ git reset --hard 1cf1f43ea1ed2767a5c1d0fbc1db4d071fdade7c
    HEAD is now at 1cf1f43 完善README描述

    10. 修改代码

    $ git status
    On branch master
    Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
    
    modified: src/App.vue
    
    no changes added to commit (use "git add" and/or "git commit -a")

    11. 撤销修改
      修改过的内容 -> 上一次提交的状态

    • git checkout file 回滚
    • git checkout readme 撤回对代码做的修改,回滚到上一次提交的状态 将代码从工作区备份回滚到修改之前的状态
    $ git status
    On branch master
    Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
    (use "git checkout -- <file>..." to discard changes in working directory)
    
    modified: src/App.vue
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    fei@home-fei MINGW64 /e/前端/vue/vue学习/vue_project/luffy (master)
    $ git checkout src/App.vue

    12. 暂存区 -> 修改过的内容

    git reset HEAD file

    13. 提交的版本 -> 暂存区

    git reset --soft 版本号

    14. 提交的版本 -> 修改过的内容

    git reset --mix 版本号

    15. 提交的版本 -> 原内容 即回滚到指定版本号

    git reset hard 版本号

    16. 删除一个文件并提交

    rm file 本地删除
    git add/rm file 提交到暂存区
    git coommit -m 'delete' 从仓库删除

    17. 删除一个文件 -> 撤销删除操作回到删除前的状态

    rm file
    git checkout -- file 撤销修改

    18. 删除一个文件并提交至暂存区 -> 撤销删除操作并回滚至删除前的状态

    rm file
    git add/rm file 提交到暂存区 
    git reset HEAD file ,从暂存区回滚到工作区
    gir checkout -- file ,把工作区里操作删除回滚
    

     第二阶段:分支协作

     情景再现:假设公司产品已经上线,要继续研发功能,你正在研发一个新功能,此时线上产品出bug了,需要你马上解决一下,或者临时新功能到来,这时你会怎么办?

    方式一:stash

      git stash:用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。

    git stash	将新增加的功能放到一个神奇的地方,代码回到修改之前的状态
    
    开始解决bug
    ...
    解决完问题并提交代码,产品上线
    
    git stash pop	将新增加的功能和现有代码合并
    注:此时会出现两种情况	1.顺利合并	2.合并冲突,需要手动解决
    
    冲突
    	$ git stash pop
    	Auto-merging README.md
    	CONFLICT (content): Merge conflict in README.md
    	
    代码
    	<<<<<<< Updated upstream
    
    	=======
    			> bug
    		- 新功能
    	>>>>>>> Stashed changes

    stash相关常用命令:

    • git stash 将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    • git stash list 查看“某个地方”存储的所有记录
    • git stash clear 清空“某个地方”
    • git stash pop 将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    • git stash apply 编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突)
    • git stash drop 编号,删除指定编号的记录

    git stash作用,帮助我们暂时存储已经开发一些功能的代码,继续做其他事情,做完之后,再回来继续开发

    方式二:branch

    git branch dev	创建一个新的dev分支
    git checkout dev	你跳转到dev分支开发新功能
    git add .
    git commit -m 'xxxx'
    
    公司产品出现Bug
    
    git branch master	跳转到master分支
    git branch dev2		创建一个dev2分支解决bug
    git checkout dev2	找另一个人跳转到dev2分支解决bug
    ...		解决完bug
    git add .
    git commit -m '修改bug‘		提交代码
    
    git checkout master	跳转到master分支
    git merge dev2		将master与dev2分支进行合并
    
    git branch -d dev2	删除dev2分支
    
    这个过程中你可以继续在dev分支上进行开发,开发完成之后
    git add .
    git commit -m ’新功能完成'
    
    git branch master
    git merge dev	master分支与dev分支进行合并,发生冲突手动解决

    branch常见命令

    • git branch 查看分支
    • git branch dev 创建分支dev
    • git checkout dev 跳转到分支dev
    • git branch bug
    • git merge bug 合并分支bug
    • git branch -d bug 删除分支bug

    第三阶段:代码托管

    情景再现:自己在家里的电脑写完代码要带到公司继续开发,u盘?有风险

    • 需要一个代码托管的网站:github、Bitbucket、码云
    • 自己创建一个代码托管的网站:gitlab
    • 注册账号:
    • 用户名:邮箱
    • 密码:

    将本地代码上传到github

    前提:在github上创建一个项目,克隆远程地址

    git可以是用该URL进行向远程推送版本信息或获取版本信息

    git remote add origin https://github.com/zhangyafeii/rest_vue.git
    # git pull --rebase origin master		代码合并	可能需要
    git push -u origin master	代码推送到远程master
    
    git checkout dev		切换到dev分支
    git push -u origin dev	将代码推送到远程dev分支
    

    从远程下载代码到本地

    git clone  https://github.com/zhangyafeii/rest_vue.git
    注:默认只下载master分支
    
    git pull origin dev	从远程下载dev分支,直接下载到本地工作区。等于以上两步
    	- git fetch origin dev	从远程下载到本地版本库
    	- git merge origin/dev	将本地版本库与工作区合并	git rebase origin/dev	保持提交记录的整洁
    # git pull origin master
    	# git fetch origin master
    	# git merge origin/master
    

     场景模拟

    回到家:
    	git pull origin dev		从远程下载dev分支
    	修改代码
    	git add .
    	git commit -m '描述'
    	git push origin dev		将本地代码上传到远程
    	
    去到公司
    	git pull origin dev
    	修改代码
    	git add .
    	git commit -m '描述'
    	git push origin dev

     第四阶段:多人协同开发

    1. 允许他人操作程序

    • - 合作者
    • - 创建组织

    2. 分支

    • - master
    • - dev
    • - zhangyafei
    • - chenyun

    情景模拟

    开发功能初期
    	员工A回到家
    		git clone https://github.com/zhangyafeii/rest_vue.git
    		git branch A
    		git checkout A
    		
    		编写代码
    		
    		git add .
    		git commit -m '描述'
    		
    		git push origin A
    		
    		这时远程将会自动创建A这个分支
    	
    	员工B回到家
    		git clone https://github.com/zhangyafeii/rest_vue.git
    		git branch B
    		git checkout B
    		
    		编写代码
    		
    		git add .
    		git commit -m '描述'
    		
    		git push origin B
    		
    		这时远程将会自动创建B这个分支
    	
    功能完成合并分支
    	员工A
    		git clone https://github.com/zhangyafeii/rest_vue.git
    		git branch A
    		git checkout A
    		
    		编写代码
    		
    		git add .
    		git commit -m 'A功能开发完成'
    		
    		git push origin A
    		
    		# 第一个开发完成,首先合并比较轻松
    		git checkout dev
    		git merge A
    		git push origin dev
    		
    	员工B
    		git clone https://github.com/zhangyafeii/rest_vue.git
    		git branch B
    		git checkout B
    		
    		编写代码
    		
    		git add .
    		git commit -m '描述'
    		
    		git push origin B
    		
    		# 注意:
    		git checkout dev
    		git merge B
    		git push origin dev
    		# 报错
    		$ git push origin dev
    		To https://github.com/WuPeiqi/dbhot.git
    		 ! [rejected]        dev -> dev (fetch first)
    		error: failed to push some refs to 'https://github.com/WuPeiqi/dbhot.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.
    		
    		# 第二个以后开发完成,得先拉下dev分支,然后在最新dev分支上合并,否则会报错
    		# 正确:
    		git pull origin dev
    		git checkout dev
    		git merge B
    		git push origin dev 

    3. 规则

    • - 一起合并
    • - 合并时间:1/2


    4. 做代码review

    • 如何做代码review?

        - 创建review分支:

    • 谁来锁代码review?

    - 组长
    - 带你的人

    第五阶段:给别人代码贡献力量

    问题: 如果你要在github上给别人代码添加功能?

    • fork
    • pull request

    1. 不用反复输入用户名密码登录

    Https:
    	https://用户名:密码@github.com/zhangyafei/rest_vue.git
    	git remote add origin  https://用户名:密码@github.com/zhangyafei/rest_vue.git
    
    SSH:
    	git@github.com:zhangyafei/rest_vue.git
    前提:获取ssh的key $ ssh-keygen.exe cd /c/Users/fei/.ssh fei@home-fei MINGW64 ~/.ssh $ cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDC7Aj9QiwzWu1tOheUSEFP2XQOZ57V8mjKIKufV7qVnWx/IEg7W4/8NzDAP51drpraJcJ+eYJvltrqQzUAwdkBKmtv+VaameRseoHLvHio3BLtiw35q8LuDH4L2f0DvCXpphISF9XGkr4rEgswbPFAG8tZwEjw6sm2uOyeCyfeZHDrZKbx/Xy/4Yz6wuPjWVUj65TdsmNtvu99xjTW84pKklDUN+EIErtWyUQqljwWiwqKfEqSFyEPfLJ+OTbGxldbt14eI2nfJvvhIw42TKkpeR7JTC4EPZpHszlj54XiGpavyLBwxPtkGHKR7W9vgC7ctq0qq5nXZud8FUJ7TdD/ fei@home-fei

    2. gitignore文件 

      创建github项目的时候选择gitignore python

    3. 版本

    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 v1.0 https://github.com/zhangyafeii/rest_vue.git

      

    作者:张亚飞
    出处:https://www.cnblogs.com/zhangyafei
    gitee:https://gitee.com/zhangyafeii
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
  • 相关阅读:
    lsyncd实时同步搭建指南——取代rsync+inotify
    Linux内存管理
    [Python爬虫] 之十一:Selenium +phantomjs抓取活动行中会议活动信息
    [Python爬虫] 之十:Selenium +phantomjs抓取活动行中会议活动
    [Python爬虫] 之九:Selenium +phantomjs抓取活动行中会议活动(单线程抓取)
    python 正则表达式
    Scrapy 安装
    python 安装whl文件
    [Python爬虫] 之八:Selenium +phantomjs抓取微博数据
    [Python爬虫] 之七:selenium webdriver定位不到元素的五种原因及解决办法(转载)
  • 原文地址:https://www.cnblogs.com/zhangyafei/p/10307907.html
Copyright © 2011-2022 走看看