GIT之入门小白篇

什么是Git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。

Git是目前世界上最先进的分布式版本控制系统(没有之一)

好不好用,看看它的开发者是谁就知道了:Linux之父 Linus Torvalds

小历史: Linux内核社区原本使用的是名为BitKeeper的商业化版本控制工具,2005年,因为社区内有人试图破解BitKeeper的协议,BitMover公司收回了免费使用BitKeeper的权力。

Linus原本可以出面道个歉,继续使用BitKeeper,然而并没有。。。Linus大神仅用了两周时间,自已用C写了一个分布式版本控制系统,于是Git诞生了!

image

为什么要使用Git.

1、适合分布式开发,强调个体。

2、公共服务器压力和数据量都不会太大。

3、速度快、灵活。

4、任意两个开发者之间可以很容易的解决冲突。

5、离线工作。

基本的 Git 工作流程如下:

在工作目录中修改某些文件。

对修改后的文件进行快照,然后保存到暂存区域。

提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。

所以,我们可以从文件所处的位置来判断状态:如果是Git目录中保存着的特定版本文件,就属于已提交状态;如果作了修改并已放入暂存区域,就属于已暂存状态;如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

创建版本库

有两种取得Git项目仓库的方法。第一种是在现存的目录下,通过导入所有文件来创建新的Git仓库。 第二种是从已有的Git仓库克隆出一个新的镜像仓库来。

在目录中创建新仓库

如果一个目录还没有使用Git进行管理,只需到此项目所在的目录,执行git init,初始化后,在当前目录下会出现一个名为.git的目录


 $ mkdir learngit

 $ cd learngit

 $ git init

从已有的仓库克隆

如果Git项目已经存在,可以使用git clone从远程服务器上复制一份出来

版本库基本操作

检查当前文件状态

使用git status命令可以查看文件的状态

  $ git status
  On branch masterInitial commit 
  nothing to commit (create/copy filesanduse"git add"to track)

出现如上的提示,说明现在的工作目录相当干净,所有已跟踪文件在上次提交后都未被更改过。

现在我们做一些改动,添加一个readme.txt进去,然后再看一下状态

$ cat readme.txt
 hello git
^C

git status
On branch master

Initial commit

Untracked files:
(use "git add ..." to include in what will be committed)
readme.txt

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

Untracked files显示了这个新创建的readme.txt处于未跟跟踪状态

使用git add命令开始跟踪一个新文件

$ git status
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached ..." to unstage)

new file:   readme.txt

readme.txt已被跟踪,并处于暂存状态

将本次修改暂存

现在我们再对readme.txt进行修改,添加一行,再执行git status查看状态

$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached ..." to unstage)

    new file:   readme.txt

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.txt
image

可以看到readme.txt 不仅出现在了Changes to be committed,还出现在了Changes not staged for commit

由此可见,Git关心的是Changes,而不是文件本身。

再次执行git add,可以将本次修改提交到暂存区,Changes not staged for commit提示消失

image

提交更新

使用git commit命令将暂存区中的内容提交至版本库,工作区又是干净的了

$ git commit -m "my first commit"
[master (root-commit) 6c8912a] my first commit
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

$ git status
On branch master
Your branch is based on 'origin/master', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
nothing to commit, working tree clean

注意:一定要使用-m参数加入注释,认真描述本次的提交具体做了些什么,这对于以后我们查询历史记录非常重要。

如果觉得使用暂存区过于繁琐,可以在commit时直接使用-a参数,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤。

$ git commit -a -m"my first commit"

撤消操作

撤消操作在这里这里不做重点描述了,只列出几个常用命令。

修改最后一次提交:

git commit --amend

取消已经暂存的文件:

git reset HEAD readme.txt

取消对文件的修改:

git checkout -- readme.txt

那我们如何使用GIT呢,下面介绍一款git使用工具来给大家简化操作。

先简单介绍下sourceTree的使用

1.下载安装包

官网提供下载地址sourcetree官网地址

2.安装

在安装过程中需要注册账户,可以注册atlassian账号进行登录,或在网上找教程跳过登录步骤;点击进入免注册地址

3.使用

依次打开 工具-选项

image
image
image
image
image

首先先明白一个东西,那就是暂存的操作是将工作区的文件add到暂存区,最后commit到远程仓库。
add类比购物车

commit类比支付

想想如果没有add 那不是每买一件物品就要付一次款?

有了购物车我可以一次买好多东西,还可以把不想买的扔掉反正还没付款,付款时钱也一次性付完。

还有就是某个功能开发,add相当于是一次文件的快照版,如果你想回滚可以直接找到你暂存的快照版本,而不是一直commit到服务器上面。

储藏区的概念。将没有commit的东西扔进去,下次可以pop出来(stash pop)。比如你还没有修改完所有你想要修改的东西,但是此时需要做别的修改(比如pull代码合并冲突),没有commit是不会允许你merge的,此时就用到stash了。

下面是一些git的基本操作指令:

   mkdir:         XX (创建一个空目录XX指目录名)

   pwd:          显示当前目录的路径。

   git init          把当前的目录变成可以管理的git仓库,生成隐藏.git文件。

   touch           xx文件或者新建文件

   git add XX       把xx文件添加到暂存区去。

   git commit –m “XX”  提交文件 –m后面的是注释。

   git status        查看仓库状态

   git diff  XX     查看XX文件修改了那些内容

   git log          查看历史记录

   git reset  --hard HEAD^

   cat XX         查看XX文件内容

   gitreflog       查看历史记录的版本号id

   git checkout -- XX  把XX文件在工作区的修改全部撤销。

   gitrm XX          删除XX文件

   git remote add  originhttps://github.com/sgl/testgit 关联一个远程库

   git push –u(第一次要用-u 以后不需要) origin master 把当前master分支推送到远程库

   git clonehttps://github.com/sgl/testgit  从远程库中克隆

   git checkout –b dev  创建dev分支 并切换到dev分支上

   git branch  查看当前所有的分支

   git checkout master 切换回master分支

   git merge dev    在当前的分支上合并dev分支

   git branch –d dev 删除dev分支

   git branch name  创建分支

   git remote 查看远程库的信息

   git remote –v 查看远程库的详细信息

   git push originmaster  Git会把master分支推送到远程库对应的远程分支上 

Git仓库中的分支:

Release(发布) 分支

当项目开始时,第一件事情就是创建发布分支。发布分支是基于 master 分支创建而来。

所有与本项目相关的代码都在发布分支中,这个分支也是一个以release/开头的普通分支。

比如这次的发布分支名为release/fb

可能有多个项目都基于同一份代码运行,因此对于每一个项目来说都需要创建一个独立的发布分支。假设现在还有一个项目正在并行运行,那就得为这个项目创建一个单独的发布分支比如release/messenger

需要单独的发布分支的原因是:多个并行项目是基于同一份代码运行的,但是项目之间不能有冲突。

Bugfix(bug修复分支)

bugfix\somehotfix,BUG修复分支,所有由测试提的BUG都在这类分支上修复,可以是每一个BUG对应一个分支,

也可以一系列BUG对应一个分支,根据实际情况调整,bugfix分支的来源都是release分支

Feature(功能分支) branch

对于应用中的每一个功能都应该创建一个独立的功能分支,这会确保这些功能能被单独构建。

功能分支也和其他分支一样,只是以feature/开头。

确认要实现的功能,从develop分支创建功能开发分支,分支名可以直接使用要实现功能的简短描述,比如feature/考试题目加密功能

开发人员需要确保将发布分支的最新代码合并到功能分支,并且解决所有的冲突。

一个发布周期的流程如图所示:

image

你可能感兴趣的:(GIT之入门小白篇)