git学习笔记

git是版本控制工具,程序员必备技能。以前在学校的时候自己跟着教程学习过,现在在工作中已经用了一段时间了。在此进行总结和复习。

git的初始化操作

我通过一系列的命令对操作进行复习和解释。

  • 安装git后,需要指定用户名和邮箱

    1
    2
    $ git config --global user.name "s********a"
    $ git config --global user.email "3**********.com"
  • git init会初始化一个本次仓库

    1
    2
    3
    mkdir git_test
    cd git_test
    git init

git 提交文件

  • git add 添加文件
  • git commit 将文件提交至版本库

    1
    2
    3
    touch readme.txt
    git add readme.txt
    git commit -m "first commit"
  • git log 查看多次提交的版本文件

    1
    2
    3
    4
    5
    6
    sssdembp:git_test sss$ git log
    commit 81e27beccb5576f2e02f90ad2c373d8a7341268e (HEAD -> master)
    Author: stshihia <379187038@qq.com>
    Date: Sun Oct 21 08:51:41 2018 +0800

    first commit

回退版本

在Git中,用HEAD表示当前版本,上一个版本就是HEAD^
一般使用git log 查看版本的 commit id
通过

1
git reset --hard 81e27beccb5576f2e02f90ad2c373d8a7341268e

来回退到某个版本

暂存区和工作区

关于暂存区和工作区, 工作区就是我们能看见的目录。

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

有了暂存区,那么平时我们可以add多次,将多次改动累计到一次进行commit操作。因为git是管理修改,而不是管理文件的。

如果要删除某个文件

1
2
3
rm readme.txt
git rm readme.txt
git commit -m "remove readme.txt"

远程库的名字就是origin,这是Git默认的叫法
HEAD严格来说不是指向提交,而是指向master

分支

分支是版本库之下的一个概念,一个版本库可以有多个分支,
修改的提交时基于当前的分支的,切换分支后,会看不见之前分支的修改

1
2
3
4
5
git branch dev 创建分支
git branch 查看分支
git checkout dev 切换分支
git merge dev 合并分支到当前分支
git branch -d dev

合并分支会需要解决冲突,解决冲突就是编辑冲突的文件重新git add并commit提交。能够看出,基于文件的工作流是最为方便的,不会存在冲突,也不会在协作中出现相互覆盖。

分支管理策略

在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。

这种策略还是不好,如果不基于文件进行管理,会需要解决大量的冲突,在团队协作中增加许多工作量。
在实际工作中,我们是通过git clone多个库文件,然后checkout 来实现不同分支的管理的。但是我们是测试团队,对代码的要求要低很多。

推送是基于分支的

1
2
3
git remote -v 查看远端库地址
git pull 拉取远端的仓库
git push origin master 推送本地至master分支

git clone 只会看见master分支,需要看见远端其他分支则需要本地创建, git push 也一样

1
2
$ git checkout -b dev origin/dev
$ git push origin dev

标签tag

标签就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动)
切换到想打标签的分支,找到想打标签的commit

1
2
git tag v1.0 <commit-id>
git tag 列出所有标签

有点麻烦的是标签不是按照时间排序的

搭建本地git 服务器

通过树莓派,可以方便地进行实验
安装git

1
sudo apt-get install git-core

创建git用户

1
2
sudo adduser git
password:g***i

此时在树莓派的pi用户路径下面新建一个git repo即可进行clone操作

1
2
3
4
cd /home/pi
mkdir git_test
cd git_test
git init

在本地进行clone

1
git clone git@192.168.1.6:/home/git/git_test

但是每次进行git clone需要输入密码

总结

关于git这样的工具,重点在于使用。但是使用过一段时间之后的总结,才会让自己有所提升。

我自己工作中的一些感受:

  • 解决冲突很麻烦,协作中,最好已基于文件的方式进行合作
  • 稳定的master分支一定要保证
  • 由于提交会很多,开发重要节点打tag很重要
  • 常用的命令会总结,不常用的命令会查询

参考

https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000