09 February 2017
号外号外:专注于移动端的fullPage.js来啦!!!快点我查看

这是起底Git系列的第五篇,本篇我们来介绍一下Git基础。

安装

学习git前,你需要先安装git,git安装流程请移步这里,里面有各个平台的安装方法

基础

学习命令行工具要学会的第一步就是查看帮助文档,可以用下面的命令查看git的帮助信息

git help
git help xxx
git xxx --help
git xxx -h

接下来就是一些自定义信息了,比如配置用户名和快捷命令(别名)

git config --global user.name yanhaijing
git config --global user.email yanhaijing@yeah.net

git config --global alias.st status #git st
git config --global alias.co checkout #git co
git config --global alias.br branch #git br
git config --global alias.ci commit #git ci

值得一提的就是配置换行符了,windows上的换行符和mac和类unix不一样,在跨平台时就痛苦了,为了统一,可以将提交到仓库的换行符同配置成unix格式

git config --global core.autocrlf input

如果想把git仓库提交到服务器,可能还要配置秘钥,如果你不想每次都输入密码的话

ssh-keygen -t rsa -C yanxuefeng@baidu.com # 生成秘钥

cat ~/.ssh/id_rsa.pub # 获取公钥,配置到github 的sshkey

ssh -T -p 8235 git@icode.baidu.com # 测试是否生效

玩转git的第一步,你需要有一个仓库,获取仓库总共有两种办法

git init # 初始化一个仓库
git clone url # 克隆一个已有仓库

有时候我们不想把某些文件提交到仓库里,比如编译产生的临时文件,此时.gitignore能够发挥作用,.gitignore的规则如下

  • # 代表注释
  • 每行是一个path,glob 模式匹配
  • !代表取非
  • *代表0个或多个字符
  • ?代表一个字符
  • []代表集合

.gitattributes 这个还没想好怎么讲,挖个坑坑坑坑

git仓库的工作流如下

git的文件状态如下

想查看当前的仓库状态可以使用git status,这个命令能够给出很多提示信息,建议经常使用

关于commit的提交,每个commit必须是独立,完整的功能,保持适当粒度,不要过大也不要过小;关于提交信息的描述可以参考下开源届的规范,也可以看下我之前整理的提交规范,下面是一个提交的例子

Header = type: subject(feat fix style refactor)
Body = list

feat: 添加分享功能

给每篇博文添加分享功能Œ

- 添加分享到微博
- 添加分享到微信

在git内部一个commit的信息如下

但后面我们会进行如下的抽象

分支

git中的分支非常轻量,就是对commit的一个引用,默认git会新建一个master分支,git中有一个特殊的引用讲座HEAD,他只想当前所在的位置

有时我们需要新建或删除分支

git branch test # 新家分支test
git branch –d test # 删除test分支,当前HEAD必须不能指向test分支

建好分之后,就该切换到那个分支去了

git checkout test # 切换到test分支

新建并切换分支,可以合并成一个命令,下面的命令等同于上面两条命令

git checkout –b test

在新建的分支上开发一段时间后,你可能需要将其合并到另一个分支去,而合并分支共有4中不同的方法,关于这四种方法的区别和场景请看这篇文章图解4种git合并分支方法

远端

一张图概括远端和本地的关系,以及相应的操作命令

其实git在远端是一个完整的仓库,和本地其实一样,也有HEAD,也有master;但我们本地为了防止冲突,都将远端的引用名字放到了origin下(origin也可是别的名字)

Remote HEAD -> xxx/HEAD(origin/HEAD)
Remote master -> xxx/master(origin/master)

在.git下面的config文件里面又对应规则的配置信息,fetch哪一行,设置将远端refs/heads下的放到本地的refs/remotes/origin

[remote "origin"]
    url = git@github.com:yanhaijing/yanhaijing.github.io.git
    fetch = +refs/heads/*:refs/remotes/origin/*

对于远端最常用的操作就是更新和推送

git fetch origin # 将本地的远端和远端进行同步
git merge origin/master # 将本地的远端合并到本地分支

git pull origin # 这相当于上面两条命令

git push origin master # 将本地推送到远程分支

关于push的必须得说一下引用展开,下面这些命令是一样的,git内部都会自动展开成最后一条

git push origin master
git push origin master:master
git push origin heads/master:heads/master
git push origin refs/heads/master:refs/heads/master

有时候我们可能会查看远端的信息,比如看下远端地址啥的

git remote –v # 查看全部远端的摘要信心
git remote show xxx # 查看具体远端的详细信息

有时候我们也会增加或删除远端

git remote add xxx url # 廷加一个新的远端
git remote remove xxx # 删除一个远端

日志

有时我们需要查看git的提交日志,可以使用git log,log有大量参数,感兴趣的同学可以自行探索,但常用的就下面这么几个 git log -number # 显示最近几条 git log –oneline(–abbrev-commit –pretty=oneline)# 单行显示,显示简短commit id git log –graph # 以树形展示 git log –decorate # 显示分支名等 git log –first-parent # 显示第一父元素(不显示merge进来的树形结构) git log –all # 显示全部分支

除了git log我们还可以使用gitk这个工具,这是git 2.0以后加入的图形化工具,可以以更友好等方式查看log树,常用的有两个参数

gitk –all # 显示全部分支
gitk --first-parent # 显示第一父元素(不显示merge进来的树形结构)

下图是git log和gitk的命令复杂度和显示效果

注:如果你在mac下使用gitk,可能会发现显示非常模糊,这是因为retina屏幕的问题,可以尝试下下面的方法

首先安装retinizer,如果你没安装brew可能需要安装homebrew

$ brew cask install retinizer

然后打开gitk所在的目录

$ open /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/

打开retinizer,并将Wish.app拖拽到retiniaer的界面,然后点一下那个按钮,然后就ok了

下面是带不带--first-parent的区别

有人用git的commit只做了台北的公交线路图,我表示给跪了,感兴趣猛戳这里

diff

diff命令常用的命令有两个

git diff file #查看指定文件的差异
git diff --stat #查看简单的diff结果

下图总结了diff全部情况

常用命令总结

config
help status log
clone init 
add commit
branch checkout diff
merge rebase
fetch pull push remote

总结

如果你有任何疑问的话,欢迎留言讨论;如果本系列文章对你有帮助的话,那我很荣幸,别忘了打赏哦,O(∩_∩)O哈哈~

最后感谢你的阅读,O(∩_∩)O哈哈~

继续学习

原文网址:http://yanhaijing.com/git/2017/02/09/deep-git-4/

欢迎订阅我的微信公众帐号,只推送原创文字。扫码或搜索:颜海镜
微信公众号:颜海镜


暂无评论,抢沙发!!!