git详解
本文为“廖雪峰git教程”的学习心得
1.安装与设置git
- 首先安装git,在ubuntu中使用
apt-get install git
即可。 - 安装完成后,还需要最后一步设置,在命令行输入:
git config --global user.name "xxxx"
git config --global user.email "xxx@xxxx.com" - 因为git是分布式的,所以,每个机器都必须自报家门:你的名字和Email地址。注意git config命令的–global参数,用了这个参数,表示此机器上所有的git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址
- 配置公司的服务器地址,这样git才能通过ssh等方式定位到具体的ip
sudo vi /etc/hosts
在文件尾加入公司服务器地址:
1xx.xx.xx.xx git.xxx.org
1xx.xx.xx.xx Yocto.xxx.org
2.初始化一个空的版本库
- 创建版本库,所谓的版本库就是在这个目录下所有的文件都将被git管理,每个文件的修改、删除,Git都能跟踪。比如我们进入一个目录/xxxx,在控制台中输入
git init
随后控制台显示
Initialized empty Git repository in /xxxx/.git/
它告诉我们创建了一个空的仓库.git,我们可以用ls -a
查看/xxxx目录,发现确实多出来了一个.git目录,以后里面都会存放和此版本库有关的一些文件 - 于是乎,/xxxx就变成了版本库,里面的文件改动就可以被git管理了。有一点是要注意的,git只能管理文本文件比如txt、c文件等,像图片、可执行程序等二进制文件则无法被管理
3.add(stash)和commit的区别
- 首先对于简单应用,可以简单粗暴的认为,add 和 commit操作是绑在一起用的,要把文件提交到版本库,只需先add 再 commit即可
- add的功能是将文件添加入“暂存区域”,比如我们添加一个test.c
git add test.c
- commit的功能是把“暂存区域”内的所有文件提交到本地版本库中,比如输入:
git commit -m "wrote a test.c file"
其中的-m参数后面可以指定
随后控制台显示
[master (root-commit) 6c614cb] wrote a test.c file
1 file changed, 34 insertions(+)
create mode 100755 test.c
表示commit成功 - 为什么提交要分为add和commit两步呢?主要是为了实现分批提交,降低commit的颗粒度,比如我们修改了 a.c, b.c, c.c, d.c,其中 a.c 和 c.c 是一个功能相关修改,b.c,d.c属于另外一个功能相关修改。那么就可以采用:
- 很多时候,我们会修改一些代码或添加一些新文件,这些改动并不是针对项目的,仅仅是为了在本地方便自己开发。我们不想提交这些改动应该怎么做?这里不能使用gitignore来忽略这些文件,因为涉及到改动gitignore,这会污染远程仓库的gitignore。完全新添加的文件属于”Untracked files”,而已有文件中修改过的代码则属于”tracked files”。对于”Untracked files”,放在在工作区没有关系,我们可以不用管,而”tracked files”改过了,就不能随意放在工作区了,必须要放到暂存区。这里使用
git stash
来将它们放入暂存区,这条命令与git add最大的区别是,stash之后commit便会忽略暂存区中对应的文件,这相当于一种忽略机制
git add a.c c.c
git commit -m "function 1"
git add b.c d.c
git commit -m "function 2"
- 这样,我们就能实现先改2个文件,再改2个文件的效果(其实我们是4个文件同时改了)。由此一来,版本之间区分就更加细致
4.查看状态
- 当我们在版本库内工作时,可以随时输入
git status
来查看距离上一次add、commit以来,哪些文件被改动过了 - 我们还可以输入
git diff xxx
来查看某个文件中具体被改动的内容,被改动的地方都会被打印出来 - 当需要查看提交日志(log)时,使用
git log
命令即可,我们就可以得知每一次commit的历史记录,这个操作一般用来确定要回退到过去的某个版本 - 我们还可以通过
git reflog</