1. 写在前面
- 本文章是对《Pro Git(Second Edition)》的简单总结。因此,只是记录我认为重要的内容,用来当作目录,方便自己忘记时,快速找到。如果你对我所记录的内容不是很明白,请阅读书籍中的具体内容。
2. Git 简介
- 实际上,Git 是一种分布式版本控制技术(Version Control);
- 版本控制分为本地版本控制,集中式版本控制以及分布式版本控制;
- Git 中保存的是在某一时刻,全部文件的"快照(snapshot)"
2.1 Git 的安装及配置
- Git 的安装
- Git 配置文件说明:
/etc/gitconfig
: 系统级配置文件;对应的参数--system
~/.gitconfig(或~/.config/git/config)
: 用户级配置文件;对应的参数--global
config
: 也就是 Git 仓库中的配置文件(.git/config
);对应的参数--local
git config --list
:查看当前git配置;git config --global user.name "noodlescnliu"
: 设置用户名- 常见配置:
user.name=noodlescnliu
user.email=noodlescnliu@gmail.com
alias.lg=log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit # 用于日志格式化输出的别名
3. Git 操作文件
3.1 Git 操作文件的三个区域
Git 仓库(.git 位置)
: 用来存储文件"快照";工作区(Working Directory)
: 对文件执行增删改操作;待提交区(Staging Area)
: 文件修改完成,首先提交到该区,然后提交到Git仓库;
3.2 Git 文件中的状态
3.3 常用命令解释(以my_project/a.txt
为例)
git init
:初始化本地Git仓库,创建.git
隐藏文件夹;- 新建文件
a.txt
,并没有纳入到Git仓库的管理,属于Untracked
状态; git add a.txt
:将a.txt
的状态变为Staged
,进入到"待提交区域(Staging Area)";git commit -m 'my first commit'
: 将a.txt
的状态变为Unmodified
,进入Git仓库"快照";git status
: 检查当前目录下,各个文件正在处于哪种状态;- 当你发现
a.txt
中存在错误,或者需要添加新内容,修改之后的a.txt
,与存储在Git仓库中的"快照"内容发生了变化,因此,状态变为Modified
,需要重新git add a.txt
,git commit -m 'add new message to a.txt'
; git commit -am a.txt 'skipping the staging area'
: 是git add a.txt
和git commit -m 'skipping the staging area'
两个命令的简写。但是,文件被Git仓库管理之后,才能执行成功;
3.4 .gitignore
文件
- 有一些文件是没有必要被Git仓库管理的,例如,日志输出文件(.log),Java编译后生成的
.class
文件等;
# 示例:
# Log file
*.log
# Package Files #
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.rar
3.5 日志输出格式
git log -p -2
: 输出最近提交的两条日志;git log --pretty=format:"%h - %an, %ar : %s"
%h
: Abbreviated commit hash;%an
: 作者姓名;%ar
: 提交相对日期;%s
: commit 时,输入的提交信息;
git log --pretty=format:"%h %s" --graph
git log --abbrev-commit --pretty=oneline
: 只显示哈希值的前几位,以及提交的说明;
3.6 远程协作
git clone https://github.com/Noodlescn/guava
: 从 GitHub 中下载项目;git remote
: 查看已配置远程服务器的名称,默认下载的项目的远程服务器名称为origin
;git remote -v
: 当提交或获取项目时,origin
所代表的URL地址;git remote add <shortname> <url>
: 新增自定义远程服务器地址;git remote rename <oldname> <newname>
: 重命名远程服务器;git remote remove <shortname>
: 移除远程服务器;- 当从远程Clone项目后,张三又向远程中提交了一些内容。这时,需要使用
git fetch <remote>
来更新自己本地项目内容;而由于在自己Clone项目时,Git默认将远程服务器设置为"origin",因此,可以简写为git fetch origin
;然后,需要手动进行合并操作git merge
; git pull
: 将git fetch
操作和git merge
操作合为一步进行;git push <remote> <branch>
: 将项目分享出去,git push origin master
;git remote show "https://github.com/google/guava"
: 用于查看远程项目的信息;
3.6.1 打标签(Tagging)
- 标签主要用来标记产品版本号;
git tag
: 列出所有的标签;git tag -l "v1.8.*"
: 列出以"v1.8"开头的标签;git tag -a v1.4 -m "my version 1.4"
: 创建 Annotated Tags;
4. Git 分支(Branching)
- 示例:向Git仓库中提交三个文件:
git add README test.rb LICENSE
git commit -m 'The initial commit for my project'
- 提交之后,Git仓库中多了五个实体:
三个Blob
: 分别代表三个提交的文件内容;一个树
: 指向三个Blob;一个指针
: 指向树;
git branch testing
: 新建testing分支;git branch -d hotfix
: 删除hotfix分支;git branch
: 查看当前所有分支;git branch -v
: 查看每个分支最后提交的信息;git branch --merged
: 查看已合并的分支;git branch --no-merged
: 查看未合并的分支;
- `git checkout testing`: 切换分支;
- `git merge iss53`: 合并分支;
4.1 Git 分支远程协作
**参考资料:** - [Git Pro](https://git-scm.com/book/en/v2)