Git基础篇
以下信息均摘要与官方文档
Git诞生
Git工作机制
检出项目后会有一个.git文件用于管理git信息
我们本地的git项目就是工作区,然后通过add将修改后的文件内容会暂时存放于缓存区,最后通过commit会被提交到仓库
这里的仓库并不是像SVN一样的提交到仓库就没事了
git会在个人电脑上搭建一个仓库用于存放版本信息,就如上图只是提交到了自己的本地仓库,此时我们就需要搭建一个服务器来统一版本
开启GIT之旅
-
安装Git
-
查看git版本
$ git --version
$ git help <verb>
$ git <verb> --help
$ man git-<verb>
当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]
再次强调,如果使用了 --global 选项,那么该命令只需要运行一次,因为之后无论你在该系统上做任何事情, Git 都会使用那些信息。 当你想针对特定项目使用不同的用户名称与邮件地址时,可以在那个项目目录下运行没有 --global 选项的命令来配置。
有两种取得 Git 项目仓库的方法。 第一种是在现有项目或目录下导入所有文件到 Git 中; 第二种是从一个服务器克隆一个现有的 Git 仓库。
- 在现有目录中初始化仓库
$ git init
该命令将创建一个名为 .git 的子目录,这个子目录含有你初始化的 Git 仓库中所有的必须文件,这些文件是 Git 仓库的骨干。
- 克隆现有的仓库
$ git clone [url]
#自定义仓库名
$ git clone [url] [name]
跟SVN中的checkout(检出)是一样的
status(查看当前工作区状态) - > add . (将添加/修改后的文件添加到暂存区标记为跟踪文件) - > commit (提交到仓库) -> push(远程仓库)
- 检查当前文件状态
$ git status
会列出当前工程所在的 “分支” 以及跟踪文件信息
如果你使用 git status -s 命令或 git status --short 命令,你将得到一种更为紧凑的格式输出
$ git status -s
M README
MM Rakefile
A lib/git.rb
M lib/simplegit.rb
?? LICENSE.txt
新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。 例如,上面的状态报告显示: README 文件在工作区被修改了但是还没有将修改后的文件放入暂存区,lib/simplegit.rb 文件被修改了并将修改后的文件放入了暂存区。 而 Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。
- 跟踪新文件
$ git add [fileName]
跟踪文件如果有多个文件空格文件名,跟踪全部使用点 " . "
一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以创建一个名为 .gitignore 的文件
查看尚未暂存的文件更新了哪些部分
$ git diff
若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,但更好记些。)
$ git diff --staged
$ git diff --cached
-
提交更新
-
提交更新
现在的暂存区域已经准备妥当可以提交了。 在此之前,请一定要确认还有什么修改过的或新建的文件还没有 git add 过,否则提交的时候不会记录这些还没暂存起来的变化。 这些修改过的文件只保留在本地磁盘。 所以,每次准备提交前,先用 git status 看下,是不是都已暂存起来了, 然后再运行提交命令 git commit:
#会跳出文本让你输入提交信息,文本类型可配置具体看官方文档
$ git commit
#简写如下
$ git commit -m [text]
请记住,提交时记录的是放在暂存区域的快照。 任何还未暂存的仍然保持已修改状态,可以在下次提交时纳入版本管理。 每一次运行提交操作,都是对你项目作一次快照,以后可以回到这个状态,或者进行比较。
- 跳过使用暂存区域
尽管使用暂存区域的方式可以精心准备要提交的细节,但有时候这么做略显繁琐。 Git 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 git commit 加上 -a 选项,Git 就会自动把所有 已经跟踪过的文件 暂存起来一并提交,从而跳过 git add 步骤:
$ git commit -am [text]
- 移除文件
$ git rm [filename]
如果文件以及在缓存区添加-f强制移除
- 重命名
$ git mv file_from file_to
-
查看提交历史
-
查看提交日志
$ git log
记住,在 Git 中任何 已提交的 东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend 选项覆盖的提交也可以恢复(阅读 数据恢复 了解数据恢复)。 然而,任何你未提交的东西丢失后很可能再也找不到了。
-
远程仓库的使用
-
查看远程仓库
#展示别名
$ git remote
#展示别名+url
$ git remote -v
#详细的查看远程仓库信息
$ git remote show [remote-name]
- 添加远程仓库
#shortname 别名,url 仓库地址
$ git remote add <shortname> <url>
- 修改远程仓库别名
$ git remote rename <旧名称> <新名称>
- 删除远程仓库
$ git remote remove <仓库名>
$ git remote rm <仓库名>
- 从远程仓库中抓取与拉取
$ git fetch [remote-name]
必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。 当准备好时你必须手动将其合并入你的工作。
$ git pull [remote-name]
通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支。
- 推送到远程仓库
$ git push [remote-name] [branch-name]
像其他版本控制系统(VCS)一样,Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 等等)。 在本节中,你将会学习如何列出已有的标签、如何创建新标签、以及不同类型的标签分别是什么。
- 查看标签
#当前已存在标签列表
$ git tag
$ git show <标签名>
- 创建标签
Git 使用两种主要类型的标签:轻量标签(lightweight)与附注标签(annotated)。
我的理解是 附注标签:带注解的标签会将注释写入到标签中
- 附注标签
最简单的方式是当你在运行 tag 命令时指定 -a
$ git tag -a <tagName> -m 'xxx'
-m 选项指定了一条将会存储在标签中的信息。 如果没有为附注标签指定一条信息,Git 会运行编辑器要求你输入信息。
- 轻量标签
也就是不用带任何参数的
$ git tag <tagName>
- 后期打标签
你也可以对过去的提交打标签。
你可以在之后补上标签。 要在那个提交上打标签,你需要在命令的末尾指定提交的校验(也就是版本号)
$ git tag -a <tagName> 9fceb02
- 共享标签
默认情况下,git push 命令并不会传送标签到远程仓库服务器上。 在创建完标签后你必须显式地推送标签到共享服务器上。 这个过程就像共享远程分支一样 - 你可以运行 git push origin [tagname]。详细参考官方文档
$ git push origin [tagname]
- 检出标签
在 Git 中你并不能真的检出一个标签,因为它们并不能像分支一样来回移动。 如果你想要工作目录与仓库中特定的标签版本完全一样,可以使用 git checkout -b [branchname] [tagname] 在特定的标签上创建一个新分支:
$ git checkout -b version2 v2.0.0
Switched to a new branch ‘version2’
当然,如果在这之后又进行了一次提交,version2 分支会因为改动向前移动了,那么 version2 分支就会和 v2.0.0 标签稍微有些不同,这时就应该当心了。
我们可以配置跟简介的别名来代替git的命令,我们可以在 ~/.gitconfig配置文件的alias节点下进行手动配置
或者使用命令来配置,效果是一样的
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status
这意味着,当要输入 git commit 时,只需要输入 git ci。
现在,你可以完成所有基本的 Git 本地操作-创建或者克隆一个仓库、做更改、暂存并提交这些更改、浏览你的仓库从创建到现在的所有更改的历史。