这是起底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 git@github.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/

