书在阿里云
https://www.aliyundrive.com/s/yE7ThBoLPDX
其实就是官方文档
https://git-scm.com/book/zh/v2
1起步
安装
需要的依赖
yum install curl-devel expat-devel gettext-devel \openssl-devel zlib-devel# 为了能够添加更多 格式的文档yum install asciidoc xmlto docbook2x
用户信息
安装之后,配置用户名与邮件地址。每一次提交都会用到这些信息,并且它会写入到每一次提交中,不可更改。
git config --global user.name 'your name'git config --global user.email ''
2 基础
2.1 获取Git仓库
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”部分(也就是未暂存清单) 看到:
$ rm PROJECTS.md$ git statusOn branch masterYour branch is up-to-date with 'origin/master'.Changes not staged for commit:(use "git add/rm <file>..." to update what will be committed)(use "git checkout -- <file>..." to discard changes in workingdirectory)deleted: PROJECTS.mdno changes added to commit (use "git add" and/or "git commit -a")
然后再运行 git rm 记录此次移除文件的操作。
如果删除之前修改过并且已经放到暂存区的话,则必须要用强制删除选项 -f 。
另一个种情况是,我们想把文件从Git仓库中删除(亦即从暂存区移除),但仍希望保留在当前工作目录中。换而言之,想让文件保留在磁盘,但并不想让Git继续跟踪。当忘记添加忽略文件,不小心把一个很大的日志文件添加到暂存区,这一做法尤其有用。为达到这一目的,使用 —cached选项。
git rm -cached README
git rm命令后面可以列出文件或者目录的名字,也可以使用glob模式。
git rm log/\*.log
注意上述星号之前的反斜杠\,因为git有它自己的文件模式扩展匹配方式,所有我们不用shell来帮忙展开。次命令可以删除log目录下扩展名为.log的所有文件。
git rm \*~
该命令删除 以 `~` 结尾的所有文件。
撤销操作
如果提交完发现漏掉了几个文件没有添加,或者提交信息写错了。此时,可以运行带有--amend 选项的命令尝试重新提交。
git commit --amend
这个命令会将暂存区的文件提交。如果自上次提交以来还未做任何修改,那么快照会保持不变,而你锁修改的只是提交信息。
取消暂存的文件
如果输入了git add * 暂存了2个文件。如何只取消暂存的两个中的一个呢?git status命令提示:
$ git add *$ git statusOn branch masterChanges to be committed:(use "git reset HEAD <file>..." to unstage)renamed: README.md -> READMEmodified: CONTRIBUTING.md
提示 git reset HEAD <file> 来取消暂存。所以可以这样来取消暂存。
撤销对文件的修改
如果并不想保留对文件的修改。git status提示了如何操作
git checkout -- 文件
2.5 远程仓库的使用
查看远程仓库
git remote 可以列出远程服务器的简写。
可以指定选项 -v 会显示需要读写远程仓库的Git保存的简写与其对应的URL。
添加远程仓库
git remote add <shortname> <url>
$ git remoteorigin$ git remote add pb https://github.com/paulboone/ticgit$ git remote -vorigin https://github.com/schacon/ticgit (fetch)origin https://github.com/schacon/ticgit (push)pb https://github.com/paulboone/ticgit (fetch)pb https://github.com/paulboone/ticgit (push
现在你可以在命令行中使用字符串pb 来代替整个URL。如果你想拉取仓库中有但你没有的信息,可以运行 git fetch pb。
git fetch pb
从远程仓库中抓取与拉取
git fetch [remote-name]
推送到远程仓库
git push [remote-name] [branch-name]
远程仓库的移除与重命名
如果你想重命名引用的名字可以运行git remote rename 去修改一个远程仓库的简写。如,想将pb重命名为paul。
git remote rename pb paul# 删除远程分支git remote rm paul
2.6 打标签
Git可以给历史中的某一个提交打上标签,以示重要。比较有代表性的是人们会使用这个功能来标记发布节点。
列出标签
git tag
# 使用特定的模式查找标签。例如查找1.8.5系列的标签git tag -l 'V1.8.5*'
创建标签
git使用两种类型的标签:轻量标签与附注标签。
一个轻量标签很像一个不会改变的分支,它只是一个特定提交的引用。
然而,附注标签是存储在Git数据库中的一个完整对象。它们是可以被校验的;其中包含打标签这的名字,电子邮件、日期;还有一个标签信息,并且可以使用GUN Privacy Gurad。
附注标签
# 创建附注标签 指定-a选项git tag -a v1.4 -m 'my version 1.4'
- -m 选项指定了一条将会存储在标签中的信息。
# 查看标签信息与对应的提交信息git show
轻量标签
轻量标签本质上是将提交校验和存储到一个文件中,没有保存任何其他信息。创建轻量标签,不需要使用-a ,-s,或-m选项。
后期大标签
# 对过去的提交打标签,git log --pretty=onelinegit tag -a v1.2 9fceb02
贡献标签
默认情况下,git push命名并不会传送标签到远程仓库服务器上。在创建完标签后必须显示地推送标签到共享服务器上。
git push origin [tagname]#一次性推送多个标签git push origin --tags
2.7 Git别名
git config --global alias.co checkoutgit config --global alias.br branchgit config --global alias.ci commitgit config --global alias.st status
这意味着,当输入 git commit 时,只需要输入 git st。
