版本控制工具之git

摘要:
git storage area detailed命令快速总结初始化gitinit当前文件夹初始化代码并提交gitaddfile/自动检测工作区中修改的内容,将其提交到暂存区,gitstatus,并查看当前文件夹工作区的状态:是否有内容修改,gitcommit-m“description”暂存区内容提交到仓库代码回滚,gitseckoutfile暂存区回滚到工作区,gitset--硬“版本号”回滚到指定版本的工作区,gitset--软“版本号

git存储区域详解

版本控制工具之git第1张

命令快速总结

初始化
	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第2张

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. 允许他人操作程序

  • - 合作者
  • - 创建组织

版本控制工具之git第3张

版本控制工具之git第4张

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

  

免责声明:文章转载自《版本控制工具之git》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jmeter之JDBC Request使用方法(oracle)jira从windows迁移到linux下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

版本控制工具VSS使用介绍

什么是版本控制? 1.怎样对研发项目进行整体管理   2.项目开发小组的成员之间如何以一种有效的机制进行协调   3.如何进行对小组成员各自承担的子项目的统一管理   4.如何对研发小组各成员所作的修改进行统一汇总   5.如何保留修改的轨迹,以便撤销错误的改动 6. 对在研发过程中形成的软件的各个版本如何进行标识,管理及差异识辨  版本控制工具介绍 •S...

SVN 取消版本控制并添加至忽略列表

忽略已经版本控制的文件忽略文件和目录 起因:   由于项目中的IDE Jdeveloper在某些指定目录下面会生成server.xml以及common文件夹,且包含一个名为bc4j.xcfg的文件,每次当IDE设置发生变化,或者新建某些目录,这些文件都会被修改或者新增,而我不愿意将这些变化体现在SVN提交列表中.   正如SVN官方指南所言:如果你不小...

Git——分支详解

  在Git中,假设写了第一个版本的代码VI,然后下面又写了第二个版本的代码V2,那么V2保留的内容是相对于V1新加的内容,他们之间的关系是V2指向V1。这一条线叫做主干:master    此时在V2的基础上,想新加一个功能G1,那么可以在V2的基础上添加一个分支,这个分支G1是创建了一个新环境来写的。再比如说此时想添加另外一个新功能G2,我们同样创...

C#最佳工具集合:IDE、分析、自动化工具等

C#是企业中广泛使用的编程语言,特别是那些依赖微软的程序语言。如果您使用C#构建应用程序,则最有可能使用Visual Studio,并且已经寻找了一些扩展来对您的开发进行管理。但是,这个工具列表可能会改变您编写C#代码的方式。 C#编程的最佳工具有以下几类: IDE VS扩展 编译器、编辑器和序列化 反编译和代码转换工具 构建自动化和合并工具 版本控制...

软件的版本控制

无论是个人进行单独编码还是团体开发项目,项目的版本控制都是很重要的。就我所知的版本控制方式有两种。 最简单的版本控制就是保留软件不同版本的数份copy,并且适当编号。许多大型开发案都是使用这种简单技巧。虽然这种方法能用,但是很没效率。一是因为保存的数份copy几乎完全一样,也因为这种方法要高度依靠开发者的自我纪律,而常导致错误。 使用版本控制工具,可以方...

微信小游戏 RES版本控制+缓存策略 (resplugin和ResSplitPlugin插件使用)

参考: RES版本控制 使用 AssetsManager 灵活定制微信小游戏的缓存策略 一、我们的目标 目标就是让玩家快速进入游戏,然后根据游戏的进度加载相应的资源,并可对资源进行版本控制、本地缓存、热更新。 如果美术改一张图或者策划修改一个配置文件就要发布版本再审核,就比较麻烦了。 所以方法3是我们要实现的目标。 翻看Egret的教程,提供了RES版本控...