一.版本管理工具作用

主要讲解了git在各平台的安装和基本使用,Git能够帮助我们解决文件的提交、检出、回溯历史、冲突解决、多人协作模式等问题,并且大大提升我们的工作效率。

版本管理工具是干什么的?
1.备份文件
2.历史记录
3.回到过去
4.多端共享
5.团队协作

二.版本管理工具发展历史

三.创建一个新的项目

1.新建项目

选择公共项目或者私人项目

是否需要创建readMe文件,我们选择需要,我们可以在这个文件中写一些项目描述和修改项

这是检出项目按钮,我们可以通过 “Open in Desktop”按钮,直接打开电脑客户端的gitHub

也可以通过“Download ZIP”按钮,下载项目的压塑包到本地。

我们也可以通过命令行进行操作

1 mkdir WeChat-applet(项目名称)
2 cd WeChat-applet/ —进入文件
3 git clone https://github.com/Goddreamwt/WeChat-applet.git —通过文件地址检出


地址我们在这里复制

四.第一次提交项目

命令: vi 日记 —创建日记文件
编辑完毕后,输入 : ,然后输入wq保存

然后,我希望将创建的文件,提交到版本管理工具中

我先用命令:git status 查看一下工作区的状态

我们可以看到git提示我们,有未跟踪的文件,让我们使用
命令:git add 建立跟踪

然后看到git提示:可以使用”git reset …“撤出暂存区,但是我们要做的是提交,不需要执行撤销的命令。

使用命令:git commit

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is up-to-date with 'origin/master'.
#
# Changes to be committed:
#       new file:   日记
#
# Changes not staged for commit:
#       modified:   README.md

我们看到git要让我们填写变更的提交说明,目的是让我们方便在以后查看历史时,知道当时修改的目的是什么。

我们输入说明,然后输入 “:wq”保存退出

bogon:WeChat-applet mac$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:(use "git reset HEAD <file>..." to unstage)new file:   日记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:   README.mdbogon:WeChat-applet mac$ git commit
[master e0c8211] 我新加了一个日记文件1 file changed, 1 insertion(+)create mode 100644 日记
bogon:WeChat-applet mac$ 

我们使用命令git push提交,然后输入git注册的用户名和密码,然后显示提交成功!

然后我们再次输入命令:git status,我们可以看到git告诉我们:无文件要提交,干净的工作区

然后,我们进入gitHub的项目主页,刷新一次,就能看到新创建的文件。

点击日记,进入“日记”项目主页

点击按钮,可以直接打开电脑客户端,进行项目检出

然后,我们点击 “show in finder”按钮,打开本地文件

打开日记文件,并添加新的文字,保存。

打开客户端,我们可以看到新修改的内容。

点击Commit to master 按钮,再点击“Push origin”按钮,同步到线上

进入网页项目主页,刷新,我们可以看到我们修改的文件,已经同步到了项目中。

五.和其他小伙伴一起使用

1.关于代码冲突—解决冲突

我们创建WeChat-applet2项目,模拟两个人同时提交项目


分别修改日记文件内容,同时提交

修改WeChat-applet文件下的日记成功!

然后修改WeChat-applet2文件下的日记:


此时,git会抛出一个异常

错误:编辑器“vi”出现问题。
请使用-m或-F选项提供消息。
bogon:WeChat-applet2 mac $ git push
到https://github.com/Goddreamwt/WeChat-applet.git! [拒绝]主人 - >主人(取第一人)
错误:未能推动一些裁判'https://github.com/Goddreamwt/WeChat-applet.git'
提示:更新被拒绝,因为远程包含您所做的工作
提示:没有本地。 这通常是由另一个存储库推送引起的
提示:对同一个参考。 您可能需要先集成远程更改
提示:(例如,'git pull ...'),然后再次推送。
提示:有关详细信息,请参阅“git push --help”中的“关于快速转发的注意事

git建议我们使用git pull把代码拉下来,解决冲突,再次提交。

到https://github.com/Goddreamwt/WeChat-applet.git! [拒绝]主人 - >主人(取第一人)
错误:未能推动一些裁判'https://github.com/Goddreamwt/WeChat-applet.git'
提示:更新被拒绝,因为远程包含您所做的工作
提示:没有本地。这通常是由另一个存储库推送引起的
提示:对同一个参考。您可能需要先集成远程更改
提示:(例如,'git pull ...'),然后再次推送。
提示:有关详细信息,请参阅“git push --help”中的“关于快速转发的注意事项”。
bogon:WeChat-applet2 mac $ git pull
远程:计数对象:3,完成。
远程:压缩对象:100%(3/3),完成。
远程:共3(delta 0),重用3(delta 0),包重用0
开箱对象:100%(3/3),完成。
从https://github.com/Goddreamwt/WeChat-appleta987b26..9249f2e master - > origin / master
更新a987b26..9249f2e
错误:对以下文件的本地更改将被合并覆盖:
日记
请在合并之前提交您的更改或隐藏它们。
中止

此时,我们发现git帮助我们合并了两个有冲突的文件。

bogon:WeChat-applet2 mac$ git pull
Auto-merging 日记
CONFLICT (content): Merge conflict in 日记
Automatic merge failed; fix conflicts and then commit the result.自动合并日记
CONFLICT(内容):合并日记中的冲突
自动合并失败; 修复冲突,然后提交结果。

我们打开这个文件,能够看到它同时保留了两次修改的记录

然后我们输入命令:vi 日记,修改合并后的文件,把它修改成我们第二次想要设置的文件内容,提交!

我们告诉gitHub,我们已经解决了这次冲突。

我们可以看到,远程的版本库已经更新到了我们第二次提交的内容。

然后我们返回第一个文件,查看本地日记文件,发现仍然是原来的内容

所以我们使用 命令:git pull,把第一个文件也更新到和远程库一样的内容

到这里,就使”第一个人”的本地代码,”第二个人”的本地代码,和线上的代码都统一了。完成了一次冲突的解决!

六.如何回到过去

首先,我们先用命令:git log 查看项目的操作记录

然后复制我们要回到的操作的commit码

然后我们使用 命令:git reset –hard b3aab91a614f245faa8b06a4b700dc826a6e02bd

hard表示指针,是代码回到这个指针指向的时间点的状态

使用命令:git reflog ,会列出我们当前的版本之前的版本号

使用命令: git reset –hard b26902e(回溯过去版本号到现在时间的操作版本号)

我们又恢复到回溯之前的代码。

七,建立里程碑

我们回到项目首页,点击 release

点击 “create a new release”按钮

此时,这个界面就是创建里程碑的界面

点击 “publish release”按钮,我们就创建了一个里程碑

我们可以看到创建的release版本,如果我们的项目是开源的话,别人可能就会根据我们的release版本,下载完整项目。

八,分支开发之分支合并

什么情况下进行分支开发呢?比如:昨天我们软件发布了一个新的版本,但是出现一个BUG,需要马上进行修复。但是我们的master分支,也就是我们默认的分支,已经推送了新的功能的代码,所以我们不能再master分支上立刻进行发布。如果发布的话,就可能把那些没进行过测试的代码带到外面去,引发更严重的问题,此时我们就有必要创建一个新的分支。用发布的版本为基础的情况下,修改BUG完毕再同步到正在开发中的分支上。这样就可以不考虑现有的开发进度的情况下,把这个BUG解决掉。

首先打开我们的客户端

选择 master下拉框

点击 new ,新建一个分支。

分支名称起名叫 bug,点击确认

此时,我们可以看到current Branch 下面显示的是 bug分支,此时,我们就完成了一个新的分支的创建,此时我们本地的环境就已经切换到了新的分支当中了。

此时,我们show in finder,找到 日记 文件,打开并修改

关闭,保存。

点击 commit to bug 按钮,提交。

然后,我们如何把新修改的代码合并到master分支的代码中呢?

首先我们切换到master分支当中

表示,我们要把bug分支当中存在,master当中的分支不存在的代码,默置到master分支当中。

此时,master分支当中,就出现了bug分支修复的代码。

九,分支开发之合并到master

除了上面的合并分支的方式以外,我们还有另外一种方式,这种方式可能更适合开源软件的合并。

跟上面一样,show in finder,修改日记文件内容,关闭,保存。

上传修改结果。

然后

在网页的gitBub上打开。

点击“crate pull requeast”

10,关于多人合作的一些经验

1.多用客户端和工具,少用命令行,除非是在Linux服务器上直接开发。
2.每次提交前,diff自己的代码,以免提交错误的代码。
3.下班回家前,整理好自己的工作区。
4,并行的项目,使用分支开发。
5,遇到冲突时,搞明白冲突的原因,千万不要随意丢弃别人的代码。
6.产品发布后,记得打tag,方便将来拉分支修复bug

版本管理工具介绍—Git篇相关推荐

  1. (转)版本管理工具介绍——SVN篇(二)

    http://blog.csdn.net/yerenyuan_pku/article/details/72620498 上一篇文章我介绍了一下SVN,以及SVN服务器的安装,相信大家都安装了,接下来我 ...

  2. (转)版本管理工具介绍——SVN篇(一)

    http://blog.csdn.net/yerenyuan_pku/article/details/72620101 SVN是何物 SVN是Subversion的简称,是一款集中式的开源版本控制系统 ...

  3. 版本管理工具:git svn 的比较

    git:分布式.开发者可以提交到本地,每个开发者机器上都是一个完整的数据库.两个开发者之间,可以通过打patch的方式交换文件. svn:集中式.所谓 git 服务器,是指大家约定使用同一个网址提交. ...

  4. vscode 取消拉去变基_开发工具之 Git 篇

    人生是一场难得的修行,不要轻易交白卷    ---胡歌 前言 计划 7.6 要完成 Git 篇,7.7 完成 VsCode 篇.昨天玩了一天,

  5. 代码版本管理工具介绍

    笔者有幸接触过以下几种常用的配置管理工具:VSS.SVN.Clearcase,在此做一个小小的总结,并Ctrl+C了以前一些网友的对比评论,不一定准确,只是希望通过这些总结对自己和初学者有所帮助.如果 ...

  6. AutomatorX自动化测试工具介绍(Android篇)

    准备环境 先准备一台安卓手机,电脑上配置好Python环境. 根据 ATX官方主页上的说明,把环境配置好. https://github.com/NetEaseGame/AutomatorX 需要用到 ...

  7. Git——版本管理工具(一)

    Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...

  8. Git 版本管理工具(一)

    Git 是一个分布式版本控制工具,它的作者 Linus Torvalds 是这样给我们介绍 Git  -- The stupid content tracker(傻瓜式的内容跟踪器) 1. Git 背 ...

  9. 版本管理工具和as的一些配置

    1. 安装Git/CVS 第一步首先你需要安装Git/CVS等版本管理工具,这个请自行百度 2. 新建一个本地空仓库 新建一个仓库叫GitTest 仓库现在是空的什么都没有 找到路径,然后复制路径(这 ...

最新文章

  1. 头条二面:宕机后,Redis如何实现快速恢复?
  2. DF学数据结构系列——B树(B-树和B+树)介绍
  3. 使用帆软finereport实现跳转的一点心得
  4. Python进阶之路:namedtuple
  5. ORACLE客户端jdbc连接测试,Oracle 客户端JDBC连接测试工具
  6. 重置oracle 11G的system、sys密码
  7. [转帖]Oracle 11G RAC For Windows 2008 R2部署手册
  8. Vue Cli3 项目 vue.config.js 配置
  9. 解读金融高频交易不出错的金手指:分布式事务管理
  10. java标签居住对齐_java期末复习(八)
  11. java 解析/操作 xml 几种常用方式 xml的增加/删除/修改
  12. Struts2表单验证的xml配置
  13. qt使用QZxing生成二维码
  14. php爬虫框架phpspider,第一次使用php编写爬虫,使用了phpspider包
  15. 一款很漂亮的一天只弹窗一次的公告
  16. 年化收益率超50%的“白马股基金”,幕后操盘手终于找到了!
  17. R语言使用BOOT重抽样获取回归方程系数95%可信区间(1)
  18. 安装nginx,php8,nfs,oralce19c客户端
  19. Oracle 层次查询、递归
  20. Centos 桌面卡死解决办法,不关闭程序重启桌面

热门文章

  1. raphael参数说明
  2. 从Δημόκριτος到Schrödinger:人类与原子
  3. C++软件工程师之什么是宏?
  4. java 界面线性布局_布局Layouts之LinearLayout线性布局
  5. 蓝桥杯模块学习10——串口通信(深夜学习——单片机)
  6. 计算机测控专业主要课程,测控技术与仪器专业有哪些课程
  7. 【论文分享】Effective Seed Scheduling for Fuzzing with Graph Centrality Analysis
  8. Linux 安装ftp
  9. 【Educoder python 作业答案】国防科技大学《大学计算机基础》Python控制结构(二)※
  10. 灾害预警实时监控中心(大数据平台系列)