版本控制,GIT

本文深入探讨版本控制系统的必要性和功能,特别是Git的工作流程,包括集中式、功能分支、GitFlow、Forking和PullRequests等五种常用工作流。同时介绍了分支管理、日志查看、冲突解决等常见操作,以及SourceTree工具的使用。
摘要由CSDN通过智能技术生成

目录

版本控制(Version Control)

VCS应该做到以下几点功能:

GIT

GIT工作流

1. 集中式工作流

2. 功能分支工作流

3. GitFlow 工作流

4. Forking 工作流

5. Pull Requests

分支工作流使用场景: 

常见场景操作:

将代码从一个分支转移到另一个分支

回滚与重置区别

修改最近一次提交的备注信息

详细日志查看

冲突解决

工具SourceTree



版本控制(Version Control)

作用是追踪文件的变化。为什么需要版本控制?简单说,就是当你出错了,可以很容易地回到没出错时的状态。

在不破坏源文件的基础上,得到一个类似的新文件。文件的多版本保存是一个常见问题,通常的解决办法是这样的:

  1. 做一个文件备份(比如Document.old.txt)。

  2. 在文件名中加入版本号或日期(比如Document_V1.txt,DocumentMarch2007.txt)。

  3. 在多人编辑的环境下,共享一个文件目录,并且要求每个人编辑完以后,在文件上做出标识。

通过文件名识别版本,对于小型项目或者单个文件也许可行。但是对于软件开发来说,是不适用的。大型的、频繁修改的、多人编写的软件项目,需要一个版本控制系统(简称VCS,行话叫做"文件数据库"),追踪文件的变化,避免出现混乱。

VCS应该做到以下几点功能:

  • 备份(Backup)和恢复(Restore)。文件的每一次编辑都得到保存,可以恢复到任意一个日期。需要2007年2月23日的版本?没问题。
  • 同步(Synchronization)。让不同用户随时都能得到文件的最新版本。
  • 短期撤销(Short-term undo)。文件被你搞乱了,怎么办?那就撤销编辑,回到最近一次的无差错版本。
  • 长期撤销(Long-term undo)。有时候,你会过了很久才发现出错了。如果你想撤销一年前的一次编辑,怎么办?那就去取回一年之前的那个版本。
  • 追踪修改(Track Changes)。文件的每一次编辑,你都可以写下注解,解释编辑的原因。(这些信息储存在VCS中,而不是文件中。)这样就很容易看出,长期中文件变化的脉络和原因。
  • 追踪权限(Track Ownership)。VCS会记录每一次提交新版本的用户名。这样就容易追踪责任。
  • 试验功能(Sandboxing)。当你对文件做出重大变更时,你可以把编辑内容暂时性地保存在一个单独的区域,不断进行测试和除错。等到确认正确以后,再加入主版本。
  • 分支(Branching)和合并(merging)。分支功能可以看成是一个更大的测试版本。你将整个的代码做一份拷贝,然后再起一个独立的名字,追踪其变化,与原版本脱离关系,这就是分支。以后,你还可以将分支版本再并入源版本,这就是合并。

上有许多VCS软件可供选择,并且都有详细的教程或手册,比如SVNCVSRCSGitPerforce等等


GIT

GIT工作流

http://www.ruanyifeng.com/blog/2015/12/git-workflow.html

1. 集中式工作流

和svn一样,服务器只有一个仓库, 所以人都往这里提交,要特别注意公共文件的提交冲突 

2. 功能分支工作流

为各个新功能分配一个专门的分支来开发,开发完成再合并

3. GitFlow 工作流

为不同的分支分配一个很明确的角色, 明确定义分支之间如何和什么时候进行交互, 将开发、发布、部署、bug修复分隔开来。

两个永久分支(master, develop),所有的开发工作都围绕这两个分支进行派生跟合并

短期分支(hotfix , frature , release ) ,完成后一般都要进行删除

  • master 分支:正式发布的版本
  • develop 功能集成分支:派生于master
  • hotfix 维护/热修复分支:派生于master,专门处理bug的分支,修复完成应该马上合并于master、develop
  • frature 功能分支:派生于develop,每个功能新开一个功能分支,开发完成后合并于develop
  • release 发布准备分支:派生于develop,专门用于改善发布的功能分支。清理发布、执行所有测试、更新文档和其它为下个发布做准备操作的地方。完成应该马上合并于master、develop 

4. Forking 工作流

分布式工作流, 而让各个开发者都有一个服务端仓库。网友贡献的代码可以被集成在项目维护者的正式仓库

5. Pull Requests

消息通知+论坛,在提议的修改合并到正式项目之前对修改进行讨论。

分支工作流使用场景: 

第一次拉取代码

  1. clone(克隆) master分支到本地, 本地只有一份代码

开发一个功能并提交到远程仓库

  1. branch(分支)创建一个frature分支, checkout(检出)到这个分支(本地代码变成这个分支的), 开发...
  2. 开发完成后 add(添加) 到暂存区, commit(提交)到本地仓库
  3. merge(合并) frature到develop
  4. push(推送) 本地develop到远程develop

拉取远程仓库其他人提交的代码到本地分支

  1. checkout(检出) 到本地对应的分支, pull(拉取) 远程仓库的分支

常见场景操作:

将代码从一个分支转移到另一个分支

1. A分支的全部提交 合并 到B分支:git merge

2. A分支的单个提交 合并 到B分支:git cherry-pick

http://www.ruanyifeng.com/blog/2020/04/git-cherry-pick.html

回滚与重置区别

回滚 

回滚1, 后续的234依旧存在

重置 

重置1,  后续的234全部重置

修改最近一次提交的备注信息

git commit --amend
 

详细日志查看

1. git log 查看提交历史记录

2. git log --oneline  或者 git log --pretty=oneline 以精简模式显示

3. git log --graph 以图形模式显示

4. git log --stat 显示文件更改列表

5. git log --author= 'name' 显示某个作者的日志

6. git log -p filepath 查看某个文件的详细修改

7. git log -L start,end:filepath 查看某个文件某几行范围内的修改记录

8. git log --stat commitId  或者 git show --stat commitId 查看某一次提交的文件修改列表 

冲突解决

<<<<<<< .mine

这里的是你本地的内容

=======

而这里的是资源库中的内容,这是更新之时自动合并产生的结果;

>>>>>>>.r3541


工具SourceTree

https://jingyan.baidu.com/article/dca1fa6f19c0abf1a5405246.html

http://www.ruanyifeng.com/blog/2008/12/a_visual_guide_to_version_control.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值