Git
一、Git 工作流程
二、Git 基本概念
工作区是我们当下可以看到的目录结构,暂存区存放在
.git
目录的index
文件中,也称索引,它和分支目录一起存放在版本库中。版本库是.git
目录中的隐藏目录。
如上图所示HEAD
事实上是一个指向分支的指针,objects
是Git的对象库。
当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作git commit时,暂存区的目录树写到版本库(对象库)中,master
分支会做相应的更新。即 master
指向的目录树就是提交时暂存区的目录树。
当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 **git rm --cached ** 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 git checkout . 或者 **git checkout – ** 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。
当执行 git checkout HEAD . 或者 **git checkout HEAD ** 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
三、Git 创建仓库
1.初始化方法
git init <repo>
初始化完成后当前目录会生成.git目录。
需要纳入版本控制的文件要做如下处理
git add <filename>
git commit -m 'the first version'
2.克隆方法
git clone <repo>
如果我们需要克隆到指定的目录,可以使用以下命令格式:
git clone <repo> <directory>
3.仓库的配置
git 的设置使用 git config 命令。
显示当前的 git 配置信息:
$ git config --list
credential.helper=osxkeychain
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
core.ignorecase=true
core.precomposeunicode=true
编辑 git 配置文件:
$ git config -e # 针对当前仓库
或者:
$ git config -e --global # 针对系统上所有仓库
设置提交代码时的用户信息:
$ git config --global user.name <name>
$ git config --global user.email <email>
如果去掉 –global 参数只对当前仓库有效。
四、Git 基本操作
1.创建仓库命令
下表列出了 git 创建仓库的命令:
命令 | 说明 |
---|---|
git init | 初始化仓库 |
git clone | 拷贝一份远程仓库,也就是下载一个项目。 |
2.提交与修改
Git 的工作就是创建和保存你的项目的快照及与之后的快照进行对比。
下表列出了有关创建与提交你的项目的快照的命令:
命令 | 说明 |
---|---|
git add | 添加文件到仓库 |
git status | 查看仓库当前的状态,显示有变更的文件。 |
git diff | 比较文件的不同,即暂存区和工作区的差异。 |
git commit | 提交暂存区到本地仓库。 |
git reset | 回退版本。 |
git rm | 删除工作区文件。 |
git mv | 移动或重命名工作区文件。 |
3.提交日志
命令 | 说明 |
---|---|
git log | 查看历史提交记录 |
git blame | 以列表形式查看指定文件的历史修改记录 |
4.远程操作
命令 | 说明 |
---|---|
git remote | 远程仓库操作 |
git fetch | 从远程获取代码库 |
git pull | 下载远程代码并合并 |
git push | 上传远程代码并合并 |
五、Git分支管理
列出分支
$ git branch
创建分支
$ git branch <branchname>
切换分支
$ git checkout <branchname>
也可以使用以下方法快速创建分支并切换
$ git checkout -b <branchname>
删除分支
$ git branch -d <branchname>
分支合并
$ git merge
如果出现两个分支的文件内容不一致会导致合并冲突(会在文件内容上体现),就需要我们手动去修改,然后告诉Git冲突已解决,例如:
$ git status -s UU runoob.php $ git add runoob.php $ git status -s M runoob.php $ git commit [master 88afe0e] Merge branch 'change_site'
六、Git 提交历史
# 会显示版本名、作者、日期等信息
$ git log
# 只显示版本名和提交注释
$ git log -oneline
# 会显示分支、合并等
git log --graph
# 逆向显示所有日志
$ git log --reverse
#只想查找指定用户的提交日志
$ git log --author=<name>
# 你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after,例如:
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
# 查看指定文件的修改记录
$ git blame <file>
七、Git 标签
-a 选项意为"创建一个带注解的标签"。 不用 -a 选项也可以执行的,但它不会记录时间、作者。
$ git tag -a v1.0
# 已经发布版本通过提交记录添加注解
$ git log --oneline --decorate --graph
查看所有标签
$ git tag
指定标签信息命令:
git tag -a <tagname> -m ""
PGP签名标签命令:
git tag -s <tagname> -m ""