Git 学习(1)

什么是 Git ?

Git 是目前世界上最先进的分布式版本控制系统 。两个关键字 : 分布式和版本控制系统。
版本控制系统 : 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。更通俗来讲,它记录了你对文件的每次修改,

分布式 : 如 Git , 只要提供一台电脑作为版本集中存放的服务器就够了,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它也一样干活,只是交换修改不方便而已。而每一台电脑有各自独立的开发环境,不需要联网 (commit 是提交到本地仓库不需要联网, push 是推送到远程仓库需要联网)。

集中式 : 如 SVN , 有一个中央服务器,干活的时候,用的都是自己的电脑,需要先从中央服务器获取最新的版本,然后开始工作,工作完毕,再把自己的修改推动给中央服务器。
缺点 :提交代码需要联网的情况下才能使用,多人协作经常需要处理代码冲突。

使用 SVN 还是 Git ?

使用 SVN 还是 Git 呢 ? 我认为抛开项目和实际情况来讲毫无意义 。
如果公司以前使用的就是 SVN , 应用广泛、开发稳定 , 没有必要换到 Git 。 Git 相对 SVN 来说 , 学习成本更大一些。
如果一个人单独开发,使用 SVN 还是 Git , 我觉得都可以呀 , 对哪项工具熟悉,就使用哪个。
如果多人同时开发多个功能,使用 SVN 直接提交到中央仓库 ,经常需要处理版本冲突。我认为使用 Git 是否更好一点, 先把代码提交到本地或者另外开一个分支,开发完成后合并, 当然 Git 最后也要处理代码冲突,但 Git 使我们的开发过程更加高效,我们有更多的时间开发业务,而不是沟通处理冲突。
选择工具的目的是为了让开发高效、稳定。
良好的团队管理和开发规范比使用任何工具都要有效,单纯一味的追求工具的优劣毫无意义。

基本概念

  • 仓库 ( repository ) : 版本库 、代码库。包含了文件、目录。版本库中所有文件都可以被 Git 所管理起来。 文件添加、修改、删除都会被 Git 记录下来。
  • 主干 ( master): 是主要开发所在的目录 , 一般为项目稳定的代码,正常情况下禁止开发人员直接提交代码到 master 。
  • 分支 ( branch ) : 开发分支,正常业务开发都在该分支进行,一般代码并不稳定,代码测试稳定后合并到 trunk 。多人协作,多功能同时开发,可通过 Git Flow 来管理 。
  • 标签 ( tag ) : 一个版本发布后 , 需要打 tag , 后续版本有问题,可在 tag 上 开分支修复。
  • HEAD : 在 Git 中,它是一个指针,指向当前所在的本地分支(译注:将 HEAD 想象为当前分支的别名)。

基本的 Git 工作流程如下:
1. git add 将文件从工作区加入暂存区。
2. git commit 提交文件到本地仓库。
3. git push 推送文件到远程仓库。

即 工作区 -> 暂存区 -> 本地仓库 -> 远程仓库 , 如下图 :
这里写图片描述

Git 基础命令

以下所有命令,需要安装 Git , 并在 Git Bash中执行。

那么新建一个文件夹,将该文件夹作为 Git 仓库。输入下列命令,初始化一个 Git 仓库 。

git  init 

查看 Git 配置信息 :

git  config  --list 

查看 Git 状态 :

git status   //获取当前 Git 状态 (当前文件夹是否为 Git 仓库 ? 是否新的文件 ? 是否修改了文件 ? 都可以用该命令查询)

当进入任意一个文件夹 (该文件夹或其上级目录都不是用 Git 管理) , 调用上述命令行。很明显报错了,提示说该文件夹或其父目录都不是一个 Git 仓库。

git status
fatal: Not a git repository (or any of the parent directories): .git

在该文件夹下新建一个文件 Hello.txt ,并将该文件加入 Git 仓库中 。

git  add  hello.txt

查看文件的内容。

cat  hello.txt

修改文件内容后,提交代码。-m 代表注释 双引号之间的 detail 为你这次修改的内容注释。

git commit -m "detail"

立即执行上述命令,发现没有提交到本地仓库 。提示如下:

git  commit  -m "detail"
Changes not staged for commit:
        modified: hello.txt

文件修改后需要放入暂存区,放入暂存区后才能够提交,简单来说,你想要提交一个修改过的文件,需要做两步 :

git add hello.txt  // 和添加文件到 Git 仓库的命令一样。

加入暂存区后,然后再执行 commit 命令 ,就能够成功提交。

 git commit -m "我提交了"
[master 4bf0a96] 我提交了
 1 file changed, 2 insertions(+), 1 deletion(-)

有没有简便方法 ? 加入暂存区后,并提交代码。 有 -m 为添加注释 -am 就为添加文件到暂存区并添加注释。

git commit -am "我提交了"
[master e62cc9c] 我提交了
 1 file changed, 1 insertion(+), 1 deletion(-)

我提交了那么多次,想要看下提交的记录 。执行如下命令可以看到作者 、提交时间以及提交的内容。

git log
commit e62cc9c3e7d44ecb7199028a8d02cff970b7fb46 (HEAD -> master)
Author: XXXX<XXXX@qq.com>
Date: Tue Jun 5 22:32:49 2018 +0800
    我提交了

信息有点多 , 来美化下,如下命令。前边的一串字符可以理解为提交的版本号。

git log --pretty=oneline
e62cc9c3e7d44ecb7199028a8d02cff970b7fb46 (HEAD -> master) 我提交了
4bf0a96a8929e03cb0497ee235413394c33a6b54 我提交了
87db33d32ab96c04bef0b964f6a1ee245485487f hello world
c452c51c5688d792c3404d78e493665ac874d0f6 hello
81810e48d1497963f4e5f847e031ba7cf4c8d3c7 init git

嗯,上面是提交的文本记录,接下来看下提交的命令记录。

git reflog
e62cc9c (HEAD -> master) HEAD@{0}: commit: 我提交了
4bf0a96 HEAD@{1}: commit: 我提交了
87db33d HEAD@{2}: commit: hello world
c452c51 HEAD@{3}: commit: hello
81810e4 HEAD@{4}: commit (initial): init git

前边的几位数字为版本号的省略写法,有了这些版本省略版本号,我们可以使用 Git 回退到指定版本。例如我提交了这么多版本,突然想从第二次提交后开始写,
好办 :

git reset --hard c452c51
HEAD is now at c452c51 hello

如果我一个版本在本地修改了很多次,突然间想撤销这些修改。
一种方法 : 采取上述的的 reset 到指定版本。
另一种方法: 撤销在工作区的全部修改(就是让这个文件回到最近一次git commit或git add时的状态) 。

git checkout  --  hello.txt

如果你想删除这个文件,执行下面的命令,去文件夹看一下,文件没了,很开心。

rm hello.txt

当文件纳入 Git 管理后,即便你删除了文件,仍然能找回文件。

git checkout  --  hello.txt

执行上边的命令后,文件又回来了,这就很气了。那么我们就把文件从 Git 中删除 ,并从磁盘中移除。 rm hello.txt 仅仅是从磁盘中移除,但是文件已经加入到 Git 中管理,
因此可以从 git 中找回文件,这是版本控制的好处之一。

git rm hello.txt

如果只想从 git 中删除,并不删除磁盘文件 。

git rm --cached hello.txt

文件删除干净了吗 ? 并没有 ! 暂存区删除了, 本地还没删除 ! 因此还得执行下方命令。

git commit -m "delete file "

注意

想获得一份仓库的拷贝, SVN 使用的是 checkout ,但是 Git 使用的是 git clone , 而不是 git checkout, 这是 Git 区别于其它版本控制系统的一个重要特性,Git 克隆的是该 Git 仓库服务器上的几乎所有数据,而不是仅仅复制完成你的工作所需要文件。

总结

本文介绍了 Git 的一些基本概念和常用的基础命令。单纯的几个小时掌握 Git 是不现实的,你需要抽花几天时间系统的掌握概念和基础命令,之后在开发过程中不断的加深理解,更重要的开发过程中分支创建与合并的规范。

参考文章 :

https://git-scm.com/book/zh/v2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值