分布式版本控制系统Git-基础
Git特性
- 直接记录快照,而非差异比较:Git 把数据看作是对小型文件系统的一组快照。 每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。 Git 对待数据更像是一个快照流。
- 近乎所有操作都是本地执行:本地磁盘上就有项目的完整历史。
- 完整性:所有数据在存储前都计算校验和,然后以检验和来引用。
Git工作流程
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到Git仓库目录。
获取 Git 仓库
-
在现有目录中初始化仓库
$ git init
$ git add *.c //指定文件跟踪 $ git add LICENSE $ git commit -m 'initial project version'
-
克隆现有的仓库
$ git clone [url] <本地仓库名>
记录每次更新到仓库
检查当前文件状态
$ git status
跟踪新文件|暂存已修改文件
$ git add <file>
忽略文件
Tip:GitHub 有一个十分详细的针对数十种项目及语言的 .gitignore
文件列表,你可以在 https://github.com/github/gitignore 找到它.
$ cat .gitignore
查看已暂存和未暂存的修改
查看尚未暂存的文件更新了哪些部分
$ git diff
查看已暂存的将要添加到下次提交里的内容
$ git diff --cached
$ git diff --staged
提交更新
$ git commit -m "提交信息"
移除文件
在工作目录中删除文件并不跟踪文件
$ rm <file>
$ git rm <file>
在工作目录中保留但不跟踪文件
$ git rm --cached README
移动文件
$ git mv file_from file_to
查看提交历史
$ git log
-p:显示每次提交的内容差异。
-2:显示最近两次提交。
--stat:显示每次提交的简略的统计信息。
--pretty=oneline
--pretty=format:"%h %s" --graph:添加了一些ASCII字符串来形象地展示你的分支、合并历史。
撤销操作
提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了,可以运行带有 --amend
选项的提交命令尝试重新提交
$ git commit -m 'initial commit' $ git add forgotten_file $ git commit --amend
取消暂存的文件
$ git reset HEAD <file>
撤销对文件的修改
$ git checkout -- <file> //危险命令
Important:在 Git 中任何 已提交的 东西几乎总是可以恢复的。 甚至那些被删除的分支中的提交或使用 --amend
选项覆盖的提交也可以恢复。 然而,任何你未提交的东西丢失后很可能再也找不到了。
远程仓库的使用
查看所有已经配置的远程仓库
$ git remote -v origin https://github.com/schacon/ticgit (fetch) origin https://github.com/schacon/ticgit (push)
添加远程仓库
$ git remote add <shortname> <url>
从远程仓库中抓取与拉取
$ git fetch [remote-name]
推送到远程仓库
$ git push origin master
查看某个远程仓库的信息
$ git remote show [remote-name]
远程仓库的移除与重命名
$ git remote rename <old-remote-name> <new-remote-name>
$ git remote rm <remote-name>
打标签
列出标签
$ git tag -l 'v1.8.5*'
附注标签
$ git tag -a v1.4 -m 'my version 1.4' $ git show v1.4
轻量标签
$ git tag v1.4-lw
后期打标签
$ git log --pretty=oneline 15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'166ae0c4d3f420721acbb115cc33848dfcc2121a started write support 9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile 964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo 8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme $ git tag -a v1.2 9fceb02
共享标签
默认情况下,git push
命令并不会传送标签到远程仓库服务器上。在创建完标签后你必须显式地推送标签到共享服务器上。
$ git push origin [tagname]
想要一次性推送很多标签。
$ git push origin --tags