版本管理工具介绍—Git篇

一.版本管理工具作用

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

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

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

版本管理工具介绍—Git篇_第1张图片

三.创建一个新的项目

1.新建项目
版本管理工具介绍—Git篇_第2张图片

版本管理工具介绍—Git篇_第3张图片

版本管理工具介绍—Git篇_第4张图片

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

这里写图片描述

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

版本管理工具介绍—Git篇_第5张图片

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

版本管理工具介绍—Git篇_第6张图片

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

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

版本管理工具介绍—Git篇_第7张图片

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

版本管理工具介绍—Git篇_第8张图片
地址我们在这里复制

四.第一次提交项目

版本管理工具介绍—Git篇_第9张图片

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

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

我先用命令:git status 查看一下工作区的状态
版本管理工具介绍—Git篇_第10张图片
我们可以看到git提示我们,有未跟踪的文件,让我们使用
命令:git add 建立跟踪

版本管理工具介绍—Git篇_第11张图片

然后看到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 ..." to unstage)

    new file:   日记

Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git checkout -- ..." to discard changes in working directory)

    modified:   README.md

bogon:WeChat-applet mac$ git commit
[master e0c8211] 我新加了一个日记文件
 1 file changed, 1 insertion(+)
 create mode 100644 日记
bogon:WeChat-applet mac$ 

版本管理工具介绍—Git篇_第12张图片

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

然后我们再次输入命令:git status,我们可以看到git告诉我们:无文件要提交,干净的工作区
版本管理工具介绍—Git篇_第13张图片

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

版本管理工具介绍—Git篇_第14张图片

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

版本管理工具介绍—Git篇_第15张图片

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

版本管理工具介绍—Git篇_第16张图片

版本管理工具介绍—Git篇_第17张图片

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

版本管理工具介绍—Git篇_第18张图片

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

版本管理工具介绍—Git篇_第19张图片

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

版本管理工具介绍—Git篇_第20张图片

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

进入网页项目主页,刷新,我们可以看到我们修改的文件,已经同步到了项目中。
版本管理工具介绍—Git篇_第21张图片

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

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

版本管理工具介绍—Git篇_第22张图片

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

版本管理工具介绍—Git篇_第23张图片
分别修改日记文件内容,同时提交

版本管理工具介绍—Git篇_第24张图片

版本管理工具介绍—Git篇_第25张图片

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

然后修改WeChat-applet2文件下的日记:
版本管理工具介绍—Git篇_第26张图片

版本管理工具介绍—Git篇_第27张图片
此时,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把代码拉下来,解决冲突,再次提交。

版本管理工具介绍—Git篇_第28张图片

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-applet
   a987b26..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(内容):合并日记中的冲突
自动合并失败; 修复冲突,然后提交结果。

版本管理工具介绍—Git篇_第29张图片

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

版本管理工具介绍—Git篇_第30张图片

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

版本管理工具介绍—Git篇_第31张图片

我们告诉gitHub,我们已经解决了这次冲突。
版本管理工具介绍—Git篇_第32张图片

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

版本管理工具介绍—Git篇_第33张图片

然后我们返回第一个文件,查看本地日记文件,发现仍然是原来的内容
版本管理工具介绍—Git篇_第34张图片

所以我们使用 命令:git pull,把第一个文件也更新到和远程库一样的内容
版本管理工具介绍—Git篇_第35张图片

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

六.如何回到过去

版本管理工具介绍—Git篇_第36张图片

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

版本管理工具介绍—Git篇_第37张图片

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

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

hard表示指针,是代码回到这个指针指向的时间点的状态
这里写图片描述

版本管理工具介绍—Git篇_第38张图片

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

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

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

七,建立里程碑

版本管理工具介绍—Git篇_第39张图片

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

版本管理工具介绍—Git篇_第40张图片

点击 “create a new release”按钮

版本管理工具介绍—Git篇_第41张图片

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

版本管理工具介绍—Git篇_第42张图片

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

版本管理工具介绍—Git篇_第43张图片

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

八,分支开发之分支合并

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

首先打开我们的客户端
版本管理工具介绍—Git篇_第44张图片

选择 master下拉框

版本管理工具介绍—Git篇_第45张图片

点击 new ,新建一个分支。

分支名称起名叫 bug,点击确认
版本管理工具介绍—Git篇_第46张图片

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

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

版本管理工具介绍—Git篇_第47张图片

关闭,保存。

版本管理工具介绍—Git篇_第48张图片

点击 commit to bug 按钮,提交。

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

版本管理工具介绍—Git篇_第49张图片

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

版本管理工具介绍—Git篇_第50张图片

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

版本管理工具介绍—Git篇_第51张图片

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

九,分支开发之合并到master

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

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

上传修改结果。

然后

版本管理工具介绍—Git篇_第52张图片

在网页的gitBub上打开。

版本管理工具介绍—Git篇_第53张图片

版本管理工具介绍—Git篇_第54张图片

点击“crate pull requeast”

版本管理工具介绍—Git篇_第55张图片

版本管理工具介绍—Git篇_第56张图片

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

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

你可能感兴趣的:(软件)