书在阿里云
https://www.aliyundrive.com/s/yE7ThBoLPDX

其实就是官方文档
https://git-scm.com/book/zh/v2

1起步

安装

需要的依赖

  1. yum install curl-devel expat-devel gettext-devel \
  2. openssl-devel zlib-devel
  3. # 为了能够添加更多 格式的文档
  4. yum install asciidoc xmlto docbook2x

用户信息
安装之后,配置用户名与邮件地址。每一次提交都会用到这些信息,并且它会写入到每一次提交中,不可更改。

  1. git config --global user.name 'your name'
  2. git config --global user.email ''

2 基础

2.1 获取Git仓库

  1. git clone url myfilename

忽略文件

忽略问价的规范

  • 所有空行或者以#开头的都会被git忽略。
  • 可以使用标准的glob模式匹配
  • 匹配模式可以以(/)开否防止递归
  • 匹配模式以(/)结尾指定目录

所谓的glob模式是指shell所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc]匹配任何一个在括号中的字符;问好只匹配一个任意字符;如果在方括号中使用短划线分割两个字符,表示所有在这两个字符范围内的都可以匹配([0-9]匹配所有0到9之间的数字)。使用两个星号表示匹配任意中间目录。

跳过使用暂存区域

尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐,Git提供了一个跳过使用暂存区域的方式,只要在提交的时候,给git commit 加上 -a 选项,Git就会自动把所有已经跟踪过文件暂存起来一并提交,从而跳过git add步骤。

移除文件

要从Git中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交。可以使用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样以后就不会出现在跟踪文件清单中了。
如果只是简单地从工作目录中手工删除文件,运行git status 时就会在“Changes not staged for commit”部分(也就是未暂存清单) 看到:

  1. $ rm PROJECTS.md
  2. $ git status
  3. On branch master
  4. Your branch is up-to-date with 'origin/master'.
  5. Changes not staged for commit:
  6. (use "git add/rm <file>..." to update what will be committed)
  7. (use "git checkout -- <file>..." to discard changes in working
  8. directory)
  9. deleted: PROJECTS.md
  10. no changes added to commit (use "git add" and/or "git commit -a")

然后再运行 git rm 记录此次移除文件的操作。
如果删除之前修改过并且已经放到暂存区的话,则必须要用强制删除选项 -f 。
另一个种情况是,我们想把文件从Git仓库中删除(亦即从暂存区移除),但仍希望保留在当前工作目录中。换而言之,想让文件保留在磁盘,但并不想让Git继续跟踪。当忘记添加忽略文件,不小心把一个很大的日志文件添加到暂存区,这一做法尤其有用。为达到这一目的,使用 —cached选项。

  1. git rm -cached README
  1. git rm命令后面可以列出文件或者目录的名字,也可以使用glob模式。
  1. git rm log/\*.log

注意上述星号之前的反斜杠\,因为git有它自己的文件模式扩展匹配方式,所有我们不用shell来帮忙展开。次命令可以删除log目录下扩展名为.log的所有文件。

  1. git rm \*~
  1. 该命令删除 `~` 结尾的所有文件。

撤销操作

如果提交完发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有--amend 选项的命令尝试重新提交。

  1. git commit --amend

这个命令会将暂存区的文件提交。如果自上次提交以来还未做任何修改,那么快照会保持不变,而你锁修改的只是提交信息。

取消暂存的文件

如果输入了git add * 暂存了2个文件。如何只取消暂存的两个中的一个呢?git status命令提示:

  1. $ git add *
  2. $ git status
  3. On branch master
  4. Changes to be committed:
  5. (use "git reset HEAD <file>..." to unstage)
  6. renamed: README.md -> README
  7. modified: CONTRIBUTING.md

提示 git reset HEAD <file> 来取消暂存。所以可以这样来取消暂存。

撤销对文件的修改

如果并不想保留对文件的修改。git status提示了如何操作

  1. git checkout -- 文件

2.5 远程仓库的使用

查看远程仓库

git remote 可以列出远程服务器的简写。
可以指定选项 -v 会显示需要读写远程仓库的Git保存的简写与其对应的URL。

添加远程仓库

git remote add <shortname> <url>

  1. $ git remote
  2. origin
  3. $ git remote add pb https://github.com/paulboone/ticgit
  4. $ git remote -v
  5. origin https://github.com/schacon/ticgit (fetch)
  6. origin https://github.com/schacon/ticgit (push)
  7. pb https://github.com/paulboone/ticgit (fetch)
  8. pb https://github.com/paulboone/ticgit (push

现在你可以在命令行中使用字符串pb 来代替整个URL。如果你想拉取仓库中有但你没有的信息,可以运行 git fetch pb

  1. git fetch pb

从远程仓库中抓取与拉取

  1. git fetch [remote-name]

推送到远程仓库

git push [remote-name] [branch-name]

远程仓库的移除与重命名

如果你想重命名引用的名字可以运行git remote rename 去修改一个远程仓库的简写。如,想将pb重命名为paul。

  1. git remote rename pb paul
  2. # 删除远程分支
  3. git remote rm paul

2.6 打标签

Git可以给历史中的某一个提交打上标签,以示重要。比较有代表性的是人们会使用这个功能来标记发布节点。

列出标签

git tag

  1. # 使用特定的模式查找标签。例如查找1.8.5系列的标签
  2. git tag -l 'V1.8.5*'

创建标签

git使用两种类型的标签:轻量标签与附注标签。
一个轻量标签很像一个不会改变的分支,它只是一个特定提交的引用。
然而,附注标签是存储在Git数据库中的一个完整对象。它们是可以被校验的;其中包含打标签这的名字,电子邮件、日期;还有一个标签信息,并且可以使用GUN Privacy Gurad。

附注标签

  1. # 创建附注标签 指定-a选项
  2. git tag -a v1.4 -m 'my version 1.4'
  • -m 选项指定了一条将会存储在标签中的信息。
    1. # 查看标签信息与对应的提交信息
    2. git show

    轻量标签

    轻量标签本质上是将提交校验和存储到一个文件中,没有保存任何其他信息。创建轻量标签,不需要使用-a ,-s,或-m选项。

后期大标签

  1. # 对过去的提交打标签,
  2. git log --pretty=oneline
  3. git tag -a v1.2 9fceb02

贡献标签

默认情况下,git push命名并不会传送标签到远程仓库服务器上。在创建完标签后必须显示地推送标签到共享服务器上。

  1. git push origin [tagname]
  2. #一次性推送多个标签
  3. git push origin --tags

2.7 Git别名

  1. git config --global alias.co checkout
  2. git config --global alias.br branch
  3. git config --global alias.ci commit
  4. git config --global alias.st status
  1. 这意味着,当输入 git commit 时,只需要输入 git st

3 分支