版本控制之助你开始使用 git 的简易指南

不知道你们写代码的时候有没有这种经历:上一秒代码还能好好运行,下一秒不知道手贱改了某个地方,再运行的时候满屏都是红色的错误提示。 哈哈,用版本控制器就可以摆脱这个烦恼了,接下来给大家介绍一下git版本控制器。

版本控制

为什么要进行版本控制? 最简单的例子,当我们用文字处理软件工作时(如Word)时需要进行修改,而有时候又不确定修改的内容是不是需要的,因此会产生许多个文件,如图:

每一个文件都是在之前的文件基础上进行微小的修改,久而久之,不但文件冗杂,而且还不清楚修改的内容是什么,是一种很杂乱的方式。

而版本控制就是解决这一问题——通过记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。

采取版本控制后,你可以将文件还原到之前的状态,比较各状态之间的细节从而查出是修改了哪个地方,找出哪里出了问题。甚至你可以随意删改项目中的文件,照样可以恢复到之前的样子,因而增加了容错率,提供了更多可能性。

版本控制有三种,第一种是本地式版本控制,也就是在本地的硬盘上用数据库记录历代文件;第二种是集中式版本控制,通过一个服务器,多个用户连接到服务器进行文件的记录。 而第三种是我们着重介绍的分布式版本控制,它将前两种结合起来,在本地和服务器都建立数据库,每次工作时从服务器克隆(clone)下来,同时又与服务器交互,从而兼顾协同性和安全性。

我们所说的git就是一个分布式版本控制软件,GitHub就是一个git的托管服务。

git本地操作

git设计简单,是完全分布式,允许成千上万个并行开发的分支(Branch),有能力管理超大规模的项目,是目前首选的版本控制软件。

一、工作流程 git的三个工作区域,对应着三种状态:

git 工作流程如下:

  1. 在工作目录中修改文件。(modified)
  2. 暂存文件,将文件的快照放入暂存区域。(staged)
  3. 提交更新,找到暂存区域的文件,将快照永久性存储到 git 仓库目录。(committed)

这是最基本的流程,需要时刻记住。

二、安装git git官方网站下载对应自己电脑的版本,按照指引进行安装。

三、git使用知识

首先我们需要在本地创建一个仓库,用于存放历代版本。

1.命令行中运用cd指令进入项目的目录,输入

$ git init

这将创建一个名为.git的隐藏子目录。

2.git status:查看哪些文件处于什么状态

$ git status
 On branch master
 nothing to commit, working directory clean
(创建git仓库后目录下没有文件时的情况)

创建一个文件(test)后再使用git status命令,将会看到一个新的提示

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)

    test

nothing added to commit but untracked files present (use "git add" to track)

(新建的“test”文件出现在Untracked files下)

3.git add:跟踪文件 运行

$ git add test

此时再运行git status,会看到test文件已被跟踪,处于暂存状态(staged),显示Changes to be committed

$ 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)

    test

4.git commit:提交更新至仓库

先用git status命令确定暂存区域准备妥当, 再运行$git commit -m ”提交信息”(提交信息指本次提交的说明,类似于注释)

$ git commit -m "first"
[master 5e43df6] first
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test

此时会显示提交成功的信息。

5.git diff:显示尚未暂存的改动(并不是所有改动)

6.git rm test:删除暂存区域中的文件test

7.git log:查看提交历史

$ git log
commit 5e43df6b6d003ea70444ee3125456fd75b066803
Author: *** <****@gmail.com>
Date:   Thu Mar 16 19:37:52 2017 +0800

first

commit 1c83e2a07f0279ea510e2a323fada53166c3c657
Author: *** <****@gmail.com>
Date:   Thu Mar 16 19:16:26 2017 +0800

test

8.版本回退

在git log命令中我们可以看到类似5e43……6803的一大串字符,那就是版本号(commit id)我们可以用 git reset命令回退到之前任何一个版本:

$ git reset --hard 1c83e2a0
  HEAD is now at 1c83e2a test

(版本号不必补全,Git会自动去查找)

以上就是git的本地基本操作,包括创建一个仓库,更改、暂存和提交,查看仓库的提交历史,版本回退。

#分支 分支是把工作从主线上分离开来,以免影响开发主线。在不同的分支上你可以尝试各种各样的增删改,实现不同的设想。而git的分支模型是它最突出的特点,也是git脱颖而出的原因。

一、分支概念 在版本回退里,你可以回溯到之前的任意版本,而这些版本都是处于一条时间线上,这条时间线就是一个分支。 默认的分支为master分支,本身可以看做一个指针,HEAD指针则指向master指针,如图:

每次提交都会多出一个节点,指针也随之移动。 当我们创建新的分支时,也就创建了一个新的指针,我们通过命令将HEAD指针移到新指针上:

新提交一次后,新指针向前移动,master指针不变,这就产生了分支: 我们可以将两条分支合并,之后可以删掉新分支。

这样就完成了分支的合并。

二、分支使用 1.git branch:查看当前所有分支

$ git branch
* master

(*标示当前分支,默认处于master分支)

2.git branch testing : 创建testing分支

$ git branch testing

此时创建了testing分支,运行git branch命令验证

$git branch    
* master
testing

3.git checkout testing: 切换到testing分支

$ git checkout testing
Switched to branch 'testing'

此时主分支位于testing,运行git branch命令验证

$ git branch
  master
* testing

4.git merge testing:将master分支和testing分支合并 (假设处于master分支)

$ git merge testing
Already up-to-date.

如果在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,则会产生冲突从而无法合并,只能手动解决后再合并。

5.git branch -d删除分支

$ git branch -d testing
Deleted branch testing (was 1c83e2a).

使用GitHub GitHub 是最大的 Git 版本库托管商,尽管这不是 Git 开源项目的直接部分,但如果想要专业地使用 Git,你将不可避免地与 GitHub 打交道。

创建帐户及配置 1.访问https://github.com进行注册

2.SSH访问:

$ cd ~/.ssh
$ ls
 id_rsa        id_rsa.pub    known_hosts

寻找到id_rsa命名的文件,.pub文件是公钥,另一个是私钥。

如果找不到,可以运行如下命令创建它们

$ ssh-keygen

进入github的帐户设置,点击左侧的SSH and GPG keys,将~/.ssh/id_rsa.pub公钥文件的内容粘贴到文本区,然后点击”Add key”

SSH访问配置成功

创建、维护和管理你自己的项目。 1.点击页面右上角的+号,点击New repository按钮

Respository name是必填项目,而其余都是选填项,可以默认。

点击Create respository按钮 ,即创建了一个新的仓库 这时候可以将项目分享给其他人,通过HTTP和SSH的形式。

2.对仓库进行操作,使本地和github同步

$ git remote add origin     **********(仓库地址)   
(添加远程仓库至本地)

 $ git pull --rebase origin master    
(更新远程更新到本地)

 $ git push -u origin master  
(将本地仓库和远程仓库合并)

在今后的项目工作中就是用以上命令同步本地和Github,需要记住。

3.克隆仓库 我们可以将远程仓库的内容克隆到本地

$ git clone git@github.com:Liuwt1997/github-photo.git
Cloning into 'github-photo'...
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), 196.28 KiB | 67.00 KiB/s, done.
Checking connectivity... done.

此时远程仓库的文件全部克隆至本地。

4.Fork按钮可以将他人项目派生下来,在你的空间中创建一个完全属于你的项目副本。

如何对项目做出贡献呢?

  1. 将派生出的副本克隆到本地
  2. 创建出名称有意义的分支
  3. 修改代码
  4. 检查改动
  5. 将改动提交到分支中
  6. 将新分支推送到 GitHub 的副本中

现在到 GitHub 上查看之前的项目副本,可以看到 GitHub 提示我们有新的分支,并且显示了一个大大的绿色按钮让我们可以检查我们的改动,并给源项目创建合并请求。

如果你点击了那个绿色按钮,就会看到一个新页面,在这里我们可以对改动填写标题和描述,让项目的拥有者考虑一下我们的改动。通常花点时间来编写个清晰有用的描述是个不错的主意,这能让作者明白为什么这个改动可以给他的项目带来好处,并且让他接受合并请求。

以上就是简单的Github的使用方法。

原文发布于微信公众号 - 轮子工厂(Programmer-ing)

原文发表时间:2018-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

Git版本控制器使用总结性梳理

Git为何物? Git 是什么?大家肯定会说不就是版本控制器嘛,是的Git是目前世界上最先进的分布式版本控制系统(没有之一)。 1)那什么是版本控制器? 举个简...

20370
来自专栏程序员宝库

Laravel 开发 RESTful API 的一些心得

最近用 Laravel 写了一段时间的 API,总结一下自己的心得吧。 Start API开发我们可以看到,有些网站用token验证身份,有些用OAuth2.0...

55390
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第二十七天 SVN使用【悟空教程】

为保障团队开发过程中人员沟通各方面成本的降低,必须使用一种有效的方式减少沟通环节,提高开发效率,对资源的共享进行管理。

21410
来自专栏程序员互动联盟

Git 使用技巧

与其他技术相比,Git应该拯救了更多开发人员的饭碗。只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷...

31350
来自专栏F-Stack的专栏

F-Stack Q&A 第一期

Q1:F-Stack有中断模式吗,有计划支持吗?在计算密集型的应用中,轮询模式会占用更多的CPU资源? A1:F-Stack暂时只支持轮询模式,后续会支持中断+...

78850
来自专栏程序猿DD

Consul注销实例时候的问题

当我们在Spring Cloud应用中使用Consul来实现服务治理时,由于Consul不会自动将不可用的服务实例注销掉(deregister),这使得在实际使...

42960
来自专栏实用工具入门教程

如何部署 ftp 文件服务

文件传输协议(英文:File Transfer Protocol,缩写:FTP)是用于在网络上进行文件传输的一套标准协议,使用客户/服务器模式。它属于网络传输协...

83030
来自专栏FreeBuf

如何突破Windows环境限制打开“命令提示符”

如今,许多企业或组织都会通过使用受限的windows环境来减少系统表面的漏洞。系统加固的越好,那么也就意味着能被访问和使用到的功能就越少。 我最近遇到的情况是,...

30060
来自专栏全华班

springcloud学习手册-zuul(概念和内容)

一、什么是Zuulzuul概念和内容 Zuul 框架原理图 官方英文说明 其中重点理解一下,下面这些。 首先Zuul是什么?其实Zuul是基于JVM的路由器和服...

24730
来自专栏古时的风筝

Maven 私服的简单使用

当我们再 pom 文件中依赖了某个包后,如果在没有做特殊配置(也就是使用 maven 的默认配置)的情况下,Maven 会首先到本地仓库去搜索,如果本地仓库没有...

7900

扫码关注云+社区

领取腾讯云代金券