Git使用教程及笔记

Git简介

git是一款免费且开源的分布式版本控制系统,无论是小项目或者大项目,处理的速度都非常的快并且高效。

集中式版本控制系统 VS 分布式版本控制系统

 集中式的版本控制系统是版本库存放在中央服务器,每次工作时都需要先从服务器取得最新版本,
 然后把完成的工作推送到服务器;缺点就是需要联网之后才能工作;

这里写图片描述
分布式版本控制系统中,每个工作者的个人电脑上都有一个完整的版本库,工作的时候不需要联网;
另外,一般git也会有一个“中央服务器”,主要用来同步每个人的修改;
这里写图片描述

Git使用

Git的工作区/暂存区/版本库

 工作区(Working directory):电脑里的文件夹目录就是工作区;
 版本库(Repository):工作目录下面有一个.git目录,这个目录不属于工作区,而是Git的版本库;
 Git的版本库中最重要的就是stage,也就是暂存区,还有git自动创建的master分支,以及指向master分支的指针HEAD.
 HEAD指针是指向当前工作的版本库的;

添加文件或修改的过程

 把文件往git版本库里添加的时候,分为两步执行:
 第一步是用“git add”把文件添加进去,实际上就是把文件添加到暂存区;
 第二步使用“git commit”提交修改,实际上就是把暂存区的所有内容都提交到当前分支;
 因为创建git版本库的时候,默认创建了master分支,所以git commit默认是往master分支上面提交修改;

理解git add和git commit

 假设有一个文件test.txt,第一次你修改了,然后使用了git add test.txt把test.txt添加到暂存区;
 然后你再次继续修改test.txt文件,第二次修改完后你才使用git commit提交修改,这样实际上提交到版
 本库的是只有第一次的修改,因为第二次修改还没有被放到暂存区,你可以继续git add test.txt把新的
 修改放到暂存区,然后git commit就可以把第二次的修改也提交到版本库;所以,就是每次修改文件后,
 不进行git add的话,git commit就不会把修改添加到版本库中;

查看当前git版本库状态

 git status命令查看哪些文件被添加/删除/修改,如果你没有做任何的修改,那么暂存区里面就是“干净”的;
 git diff filename来查看文件被做了哪些详细的修改;

Git分支图解

再次提醒:HEAD指针是指向当前工作的版本库的;
(1) 假设初始版本分支状态如下:
这里写图片描述

(2) 新建dev分支,并切换到dev分支:

$ git checkout -b dev

这里写图片描述
执行完命令后,dev和master也是指针指向当前最新版本,HEAD指针就是指向dev当前的工作分支;

(3) 在dev分支上进行修改操作后状态如下:
这里写图片描述
master指向的版本没有修改,所以不用移动master;
dev版本被修改,把dev指向一个新的版本位置,HEAD继续指向当前工作分支dev;

(4) 切换回master分支,并把dev分支合并到master分支:

$ git checkout master
$ git merge dev

这里写图片描述
此时master是当前工作分支,所以HEAD指向master分支;master分支合并dev分支,所以master移动到dev指向的分支;

(5) 删除dev分支:

$ git branch -d dev

这里写图片描述
dev分支被删掉,HEAD仍然指向当前工作分支master,master分支上面没有更改,所以保持不变;

Git查看版本提交日志

git log命令可以查看版本所有的提交日志,使用git log –graph可以看到分支合并图;

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:  Tue Aug 20 15:11:49 2013 +0800

git reflog可以用来查看你自己在本地做了哪些版本提交修改,

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

上面两个命令查看历史的提交日志都可以看到每个日志的commit_id(就是3628164,后面长长的可以省略不写),

版本回退

HEAD指向的版本是当前版本,因此允许我们在版本的历史之间穿梭,使用下面命令:

$ git reset --hard commit_id

在进行版本穿梭/重返前,可以使用上面的 git log 或者 git reflog 来查看commit_id确定需要回退到哪个版本;

撤销修改

 场景1:当你改乱了工作区的某个文件内容,想直接丢弃工作区的修改时(此时还没添加到暂存区),用命令 `$ git checkout -- file`;
 场景2:当你不但乱改了工作区的某个文件内容,还添加到暂存区时(`$ git add`),想丢弃修改,分两步,第一步用命令 `$ git reset HEAD file`
 就会回到场景1,第二部按场景1操作;
 场景3:已经提交到版本库时(`$ git commit`),想要撤销本次提交的修改,那么就使用版本回退即可(不过如果已经提交到远程库就无法返回);

文件删除

$ git rm file

分支命令

 查看分支:`$ git branch`
 创建分支:`$ git branch name`
 切换分支:`$ git checkout name`
 创建+切换分支:`$ git checkout -b name`
 合并分支到当前分支:`$ git merge name`
 删除分支:`$ git branch -d name`

关联/克隆/添加到远程仓库

要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆; Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快;

$ git remote add origin git@server-name:path/repo-name.git
$ git clone git@github.com:michaelliao/gitskills.git
$ git clone https://github.com/michaelliao/gitskills.git
$ git push origin master

多人协作

(1)查看远程库信息,使用git remote -v;
(2)本地新建的分支如果不推送到远程,对其他人就是不可见的;
(3)从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
(4)在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
(5)建立本地分支和远程分支的关联,使用git branch –set-upstream branch-name origin/branch-name;
(6)从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。

Bug分支

0.假设当前分支为dev

$ git branch
  master
* dev

1.把当前工作现场“存储”起来

$ git stash

2.创建bug分支

$ git checkout -b issue/110

3.修复分支后,切换回dev分支,并合并分支

$ git checkout dev
$ git merge --no-off issue/110

加上 –no-off 的意思是为了以后删除的时候还可以恢复

4.删除issue/110分支

$ git branch -d issue/110

5.切换回dev分支,继续工作

$ git checkout dev

6.恢复之前保存的工作环境

$ git stash apply 或者 $ git stash pop

参考链接

https://lvwzhen.gitbooks.io/git-tutorial/content/index.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值