GIT 使用教程
一、GIT的安装教程
a) 安装包下载地址(windows 版):http://gitforwindows.org/
b) 安装:
安装完成之后,桌面上会有GIT Bash 图标,点击该快捷图标,进入GIT的命令窗口,通过该窗口,进行GIT的相关操作。
一、 架构图
二、 常用操作命令
GIT 配置
Git 提供一个叫Git config的工具,专门用来配置或者读取相应的工作环境变量。Window下环境变量(本机:用户目录):C:\Users\Administrator\ .gitconfig
系统中对所有用户适用的配置,使用 –system 选项,对当前用户适用的配置,使用—global选项。
添加用户信息
添加用户姓名:
$ git config –global user.name “eric.song” |
添加用户邮箱
$ git config –global user.email “xiaodongsong@hengtiansoft.com” |
查看配置列表
$ git config --list |
执行结果:
查看某个环境变量的值
$ git config user.name |
执行结果:
Git 的工作流程
一般工作流程如下:
l 克隆Git资源作为工作目录
l 在克隆的资源上进行修改和添加文件
l 如果其他人修改了,你可以更新资源
l 在提交前查看修改
l 提交修改
l 在修改完成后,如果发现错误,可以撤回提交,并再次修改并提交
工作流程如下图:
Git 仓库的创建
仓库初始化
$ git init |
执行完该命令,会在仓库目录中生成一个.git目录,该目录包含了资源的所有元数据。
如果使用指定目录作为仓库,请执行一下命令:
$ git init newRepo |
初始化之后,会在newRepo目录中创建.git目录,所有Git需要的数据和资源都放在这个目录下。
如果当前目录有几个文件要纳入版本控制,需要先用git add命令告诉Git对这些文件进行跟踪:
$ git add *.java $ git add README $ git commit –m “初始化项目版本” |
Git clone 创建版本库
我们使用git clone 命令从现有Git 仓库中拷贝项目(类似SVN的checkout):
克隆到当前目录
$ git clone <repo> |
克隆到指定目录
$ git clone <repo> <directory> |
说明:repo:仓库 directory:指定目录
git add 命令
git add 命令可以将文件添加到缓存
git add -u 添加修改过的文件或者已删除的文件到索引库
git add -a 所有跟踪文件中修改或者删除的以及未跟踪的文件信息添加到索引库
git add -i 查看所有被修改或者已删除文件但是没有提交的文件。
git status 命令
用户查看当前项目的状态,-s 选项,用以获得简短的输出结果。可以用来检测那些文件修改过
git diff 命令
执行git diff 查看执行git status 的结果的详细信息。
git diff 主要的应用场景:
尚未缓存的改动:git diff
查看已经缓存的改动:git diff –cached
查看已缓存与为缓存的所有改动:git diff HEAD
显示摘要而非整个diff:git diff –stat
git commit 命令
使用 git add 命令将快照内容添加到缓存区,而执行git commit 命令将缓存区的快照添加到仓库。Git 为你的每一个提交都记录了你的名字和邮箱,所以第一步要设置用户名和邮箱地址.
git commit –a :跳过缓存步骤,直接提交的到版本库
$ git commit –am “直接添加变更到版本库” |
git reset HEAD命令
用于取消缓存的内容
1. 取消某个文件的缓存
$ git reset HEAD -- <filename> |
说明:filename 文件名称
Git rm 命令
从git已跟踪的文件中,删除文件
$ git rm <file> |
如果删除之前已经修改过,并且已经放到缓冲区的话,则必须用强制的删除选项-f
$git rm –f <file> |
如果把文件冲暂存区中删除,但是工作空间中保留使用 –cached选项
$git rm –cached <file> |
递归删除,删除文件夹下的所有文件和文件夹
$git rm –r * |
Git mv 命令
用于移动和重命名一个文件、文件夹和软连接
Git 分支管理
创建分支命令
$ git branch (branchname) |
切换分支命令
$ git checkout (branchname) |
当你切换分支的时候,Git会用该分支最后提交的快照替换你的工作目录中的内容,所有多个分支,不需要建立多个目录
合并分支命令(合并到主分支)
$ git merge |
你可以选择多次合并到统一分支,也可以选择在合并后直接删除并并入的分支
合并分支命令(指定分支)
$ git merge (branchname) |
将指定分支合并到当前分支中,在合并前,需要切换到需要合并的到的分支,比如,将branch的分支master,需要先切换到master分支上,在执行合并命令。
列出分支命令
$ git branch |
没有参数的时候,会列出你在本地的分支
创建分支并理解切换到该分支
$ git checkout –b (branchname) |
删除分支
$ git branch –d (branchname) |
合并冲突
1. 用比较工具,解决冲突。然后用git add 命令告诉git 冲突已经解决
$ git add (冲突文件) |
查看提交历史
$ git log |
查看提交历史记录
$ git log --oneline |
用--oneline 选项查看历史记录的简洁版本
$ git log –oneline --graph |
用—graph 命令查看历史中什么时候出现了分支,合并
$ git log –reverse --oneline |
用—reverse 参数逆向显示所有日志
$ git log –author=XXX |
用 –author 查看XXX的提交的日志信息
$ git log –oneline –before={3.weeks.ago} --after={2014-01-30} –no-merges |
如果你要指定日期,可以执行几个选项:--since 和 --before,但是你也可以用 --until 和 --after。
Git 标签管理
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。
$git tag –a v1.0 |
创建 tag V1.0,-a 选项:带注解的标签
$ git tag |
查看所有标签
$ git tag –a v0.9 –m “标签注释” |
指定标签信息命令
$git tag –s V0.9 –m ”标签注释” |
PGP签名标签命令
三、 GIT的基本概念
工作区:就是在你的电脑中能够看到的目录
暂存区:英文叫stage or index。一般存放在“.git目录下”的index文件中,所有把暂存区也叫做索引。
版本库:工作区中有一个隐藏的目录.git,这个不算工作区而是GIT的版本库。
具体关系如下图:
图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage, index),标记为 "master" 的是 master 分支所代表的目录树。
图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。
图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。
当对工作区修改(或新增)的文件执行 "git add" 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。
当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。
当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
当执行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
四、 Git 远程仓库
如果你想通过git分享你的代码或者与其他团队成员合作开发。你就需要将数据放到一台其他开发人员能够链接的服务器上。
GITHUB 是官方远程git仓库,代码共享,如果不希望其他看到,需要缴费。建议搭建私有仓库。
添加远程仓库
$ git remote add [shortname] [url] |
e.g
$ git remote add origin git@github.com:songxiaodong/eric-git-test.git $ git push –u origin master |
查看当前的远程仓库
$ git remote |
提取远程仓库
$ git fetch origin |
从远程仓库下载新分支和数据,该命令执行完之后,还需要执行git merge 远程分支到你所在的分支。
$ git merge origin/master |
推送到远程仓库
$ git push [alias] [branch] |
以上命令将你的 [branch] 分支推送成为 [alias] 远程仓库上的 [branch] 分支.
删除远程仓库
$ git remote rm [alias] |
Alias :别名
查看远程分支
$ git branch -r |
Git 发布补丁和打补丁
代码修改后要发到同事开发的代码中,或者修复了bug后要将修复的代码添加到另外一份库中,这个时候手动记下改动太麻烦,git有创建补丁的功能,即将改动的代码统一添加到一个补丁文件中,后缀名为.patch,然后通过邮件或U盘的形式将补丁发送到需要的版本中,然后再执行打补丁命令,这样改动会自动合并到该版本库中。
创建补丁
通过Diff 创建补丁
git diff > my patch |
通过某个提交创建补丁
$ git format-patch <commit_id> |
打补丁
$ patch -p1 < my.patch |
$ patch -p0 < my.patch |
-p0 就表示从当前目录,找一个叫作b的目录再在这个目录中找一个reset.txt的文件。 -p1 就表示从当前目录,忽略第一层b的目录,在当前目录中找一个reset.txt的文件。
撤销补丁
$ patch -R -p1 < my.patch |
Git 存储工作线程
创建存储工作线程
对working directory 来说的,对缓存无效
$ git stash |
查看工作现场列表
显示现场清单
$ git stash list |
恢复现场
$ git stash apply //恢复工作线程 $ git stash drop //删除工作现场列表中的对应项 |
或者直接使用
$ git stash pop //恢复现场并删除现场列表中的对应项 |
附录
参考资源:
1. http://www.runoob.com/git/git-workflow.html RUNOOB.COM
2. https://git-scm.com/book/zh/
3. https://blog.csdn.net/zl1zl2zl3/article/details/52637737