Git入门

本文参考:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  先扯一句,对于Linus花了两周时间用C写了Git这种行为,渣渣表示这是对牛X最好的诠释。
一、Git简介
  Git嘛,就是一个分布式版本控制系统,GitHub则是提供Git仓库托管服务的。分布式是相对于集中式而言的,先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

二、Git安装

  pass;

三、创建版本库

  1、首先选择一个合适的地方

  2、$ git init 将这个目录变成Git可以管理的仓库

  3、每次修改后要先将修改放入staged区

    $git add/rm <file>

    如果是批量修改,可用 $ git add -A

  4、告诉Git,把文件提交到仓库

    $ git commit -m "description of change"

  5、$ git status 查看当前仓库状态

  PS:git的命令提示真的是极好的!!!

四、时光机穿梭

  $ git log  查看历史纪录,加上参数 --pretty=online 可以减少输出信息。如:

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

  3628164...882e1e0的是commit id(版本号),在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

  $ git reset --hard HEAD^ 回退到上一个版本

  $ git reset --hard 3628164 指定版本号回退,版本号不用写全,写个差不多就行,Git会自动去找

  $ git reflog 用来记录每一次命令

  工作区和暂存区的概念:

  工作区就是能看到的目录

  版本库就是隐藏的.git目录

  Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD

  git-repo

  git add把文件添加进去,实际上就是把文件修改添加到暂存区;

  git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

  因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。

  $ git diff HEAD -- <file> 查看工作区和版本库里面最新版本的区别

  $ git checkout -- <file> 丢弃工作区的修改

  $ git reset HEAD <file> 可以把暂存区的修改撤销掉

五、远程仓库

  在GitHub上添加远程仓库

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于这个Key也不是用于军事目的,所以也无需设置密码。

如果一切顺利的话,可以在用户主目录里找到.ssh目录,里面有id_rsaid_rsa.pub两个文件,这两个就是SSH Key的秘钥对,id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容:

github-addkey-1

点“Add Key”,你就应该看到已经添加的Key:

github-addkey-2

为什么GitHub需要SSH Key呢?因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

当然,GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

在GitHub上创建一个新的仓库后,把本地仓库的内容推送到GitHub仓库 

$ git remote add origin git@github.com:<user_name>/<repo_name>.git

这样子就添加了了一个叫origin的远程库,下一步就是把本地库的所有内容推送到远程库上:4

$ git push -u origin master

把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程。

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。关联起来以后只需要通过命令:

$ git push origin master

从远程库克隆一个本地库(SSH方式)

$ git clone git@github.com:<user_name>/<repo_name>.git

六、分支管理

$ git branch 查看分支

$ git branch <branch_name> 创建分支

$ git checkout <branch_name> 切换分支

$ git checkout -b <branch_name> 创建+切换分支

$ git merge <branch_name> 合并某分支到当前分支

$ git branch -d <branch_name> 删除分支

$ git log --graph 查看分支合并图

$ git log --graph --pretty=oneline --abbrev-commit

$ git merge --no-ff -m "<commit>" <branch_name> 合并分支禁用Fast forward

分支策略在实际开发中的应用

git-br-policy

七、标签管理

$ git tag <tag_name> 新建一个标签,默认为HEAD,也可以指定一个commit id

$ git tag -a <tag_name> -m "<commit>" 指定标签信息

$ git tag -s <tag_name> -m "<commit>" 用PGP签名标签

$ git tag 查看所有标签

$ git push origin <tag_name> 推送一个标签

$ git push origin --tags 推送全部未推送过的本地标签

$ git tag -d <tag_name> 删除一个本地标签

$ git push origin :refs/tags/<tag_name> 删除一个远程标签

原文地址:https://www.cnblogs.com/LinKArftc/p/4989097.html