Git 王者超神之路
来源:互联网 发布:长谷川逸子 知乎 编辑:程序博客网 时间:2024/06/11 18:46
安装Git
Linux
Mac
直接在Terminal
执行git
命令, 如果没有会提示安装方法.
如果喜欢安装程序的话, 点这里
配置文件
第一次安装, 千万别要忘了配置你的git的使用者名字和邮箱. 这个道理很简单, 每一次的提交时需要记录提交者的, 如果没有提交者, 那么bug出现找谁来背锅??
查看config
Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。
当前使用仓库的 Git 目录中的 config 文件(就是 .git/config
):针对该仓库。
每一个级别覆盖上一级别的配置,所以.git/config
的配置变量会覆盖/etc/gitconfig
中的配置变量。
当然, 也可以查看某一项配置信息.
- 形式:
git config [--global|--system]
设置用户信息
使用--global
选项, 当以后在该系统上做的任何操作都会使用此属性. 如果你需要在某一个特定的项目使用其他名字和邮箱, 那么可以通过设置项目中的config文件, 这样config中的属性会覆盖掉global的全局属性, 并且当在其他项目中并不会造成影响. 使用方式只需要去掉--global
参数即可修改项目中的.git/config
文件
获取帮助手册
形式: git help
或者 git --help
比如查看config手册
Git别名
例如: 生成别名之后可以在日后用简短的表示来使用
.gitignore文件
对于自动生成的文件, 日志, 编译的临时文件等. 可以对其进行配置, 让git不追踪这些文件
规范如下:
- 所有空行或者以 # 开头的行都会被 Git 忽略。
- 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(/)开头防止递归。
- 匹配模式可以以(/)结尾指定目录。
- 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
glob模式
是指shell所使用的简化了的正则表达式.
*
:匹配零个或多个任意字符[abc]
:只匹配括号内的任意一个字符[0-9]
:使用短划线表示范围, 可以匹配0到9之间的任何字符.?
:匹配任意一个字符**
:匹配任意的中间目录,例如a/**/z
可以匹配a/z
,a/b/z
,a/b/c/z
等
如下给出一个样板:
仓库的基础操作
初始化仓库
添加文件到暂存区
status仓库
紧凑式中字母的表示含义如下:
??
:表示新添加的未追踪的文件M
:M出现在右边,表示该文件被修改但是还没有放入暂存区M
:M出现在左边,表示文件被修改已经放入了暂存区MM
:出现两个,代表此文件在工作区修改已经放入了暂存区, 但之后有进行了修改,没有添加到暂存区
diff仓库
如果你想知道文件具体修改的内容, 那么diff
会很有用
提交更新
移除文件
如果在工作区间对一个文件进行删除, 需要先进行add
,然后才可以提交. 使用git rm
可以直接在工作区间删除文件, 并提交到暂存区.
移动文件
同样使用git rm
会方便很多, 并且如果相对文件重命名也可以如此
当执行了这条语句之后, 只需要在下一次commit
即可, 不需要考虑额外操作. 等价于如下:
查看历史提交
如果是最基本的git log
, 那么会按提交时间列出所有更新, 包括提交的SHA-1校验和, 作者名称,邮箱,提交时间,提交说明. 下面说说常用选项.
关于format
对应的常用占位符的写法和意义
图形展示分支的合并历史
git log的一些其他操作
查找一个字符串的出现和删除的提交
哈哈,即使如果你不小心写个隐藏bug不管几个月之后,如果老大要想找出问题是写引发的其实很简单.例如这样$ git log -p fileName
想甩锅?算了吧,还是认错以后多注意吧.
还有一些限制log输出的选项
一个实际的例子,如果要查看 Git 仓库中,2016 年 11 月1号到7号,作者叫苏的提交文件,可以用下面的查询命令:
撤销操作
amend重新提交
当我们commit
之后突然发现漏掉了一个文件, 这个时候不可能对一个文件再进行commit
一次, 这样做就显得很多余, 而如果版本回退之前再添加也比较麻烦. 这个时候就可以使用这个amend
命令.如下:
取消暂存的文件
就是对文件进行了git add
操作. 这个时候可以reset
撤销对文件的修改
场景: 当文件修改了, 但是还没有进行git add
的时候还只是在工作区间, 还原成最后一次提交的内容
要注意使用, 使用之前确定是否要抛弃已经添加的内容. 因为这个动作可能让你最新添加的内容彻底丢失. 因为没有进行commit
, 一般来说进行了commit
的内容都是可以恢复的.
标签
Git可以给历史中的某一个提交打上标签, 以示重要. 比如每次正式版本的上线等.
列出标签
创建标签
标签分为两种一种是附加标签
另一种是轻量标签
.
- 附加标签: 会保存打标签者的信息, 时间和附加信息. 最后更随打标签的提交
- 轻量标签: 只是在一个提交上做一个标记. 存储在一个专门保存标签的文件,指向提交的hash值
先来看附加标签:
轻量标签
后期打标签, 就是对已经提交某次提交进行追加标签设置
共享标签
默认情况下, git push
不会把标签传递到远程服务器. 需要显示的推送标签共享到服务器
例如: git push origin [tagname]
检出标签
git中不能真正的检出一个标签, 但是可以在标签处创建一个新的分支.如下
查看标签对应的信息
使用git show
可以查看对应标签的详细信息, 如果git show
这样的命令只是显示上次提交的内容
分支操作
分支的创建
分支的创建, 其实本质就是创建一个可以移动的指针,这个指针名就是新的分支名
分支的切换
所谓的分支切换就是HEAD
指针的指向的改变
分支合并
利用git merge
, 这条命令会把当前所在分支与目标分支的内容合并, 可以这样理解, 如果当你试图向目标分支合并时, 如果当前分支可以顺着一个分支走下去, 那么本质上其实只是当前指针的向前移动, 由于这种情况下的合并并没有需要解决的分期, 所以git会称这个是fast-forward
快速前进.
删除分支
当一个功能分支开发完毕之后, 并进行了合并, 通常这个分支也就被删除,以保证仓库中的干净.
分支管理
git branch
命令不只是可以创建于删除分支. 如果不添加任何参数, 那么会得到所有分支的一个列表
变基
和合并
merge
相似的效果都是合并分支, 但是使用变基rebase
可以让提交历史变得更简洁. 如下
图片1是merge
合并效果, 图片2是rebase
合并效果. 明显变基会让提交历史看起来更加干净. 使用如下:
rebase
原理就是, 从目标分支和要变基的分支向上查找出共同祖先节点就是c2
, 然后把要变基的分支到c2
节点的所有提交,提取出相应的修改生成一个副本, 并追加到目标分创建相对应的提交. 此时变基的分支指向目标分支master
的后面某一次提交. 此时只要使用修改master
指向指针使用merge
即可.
远程分支
拉取远程分支
假设远程如果有一个dev
分支, 你使用fetch
进行抓取. 这个时候, 本地不会自动生成一个可编辑的副本, 换句话说就是这种情况下, 不会有一个新的dev
本地分支, 只有一个不可以修改的origin/dev
指针. 这个时候可以运行git merge origin/dev
命令, 将这些远程dev分支的工作合并到当前分支. 如果想要在自己本地的dev分支上工作, 可以将其建立在远程分支之上.
创建远程分支
如果你的本地有一个新建的dev
分支, 并且你进行了提交, 此时你想把这个分支也提交到远程的dev
分支, 但是远程还没有创建dev
, 这个时候可以使用如下命令: git push
删除远程分支
跟踪分支
从一个远程跟踪分支检出一个本地分支会自动创建一个叫做 跟踪分支
(有时候也叫做 “上游分支”)。 跟踪分支是与远程分支有直接关系的本地分支。 如果在一个跟踪分支上输入git pull
,Git
能自动地识别去哪个服务器上抓取、合并到哪个分支。
当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master
的 master
分支。 然而,如果你愿意的话可以设置其他的跟踪分支 – 其他远程仓库上的跟踪分支,或者不跟踪 master
分支。 最简单的就是之前看到的例子,运行 git checkout -b [branch] [remotename]/[branch]
。 这是一个十分常用的操作所以 Git 提供了 --track
快捷方式:
设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支,你可以在任意时间使用 -u 或 –set-upstream-to 选项运行 git branch 来显式地设置。
查看设置的所有跟踪分支
远程仓库操作
克隆仓库
查看远程仓库
如果需要查看某一个仓库更多的信息时, 使用git remote show ...
添加远程仓库
远程仓库的拉取推送
拉取
大家常用的可能是git pull
这个指令. 这个指令的通常会从服务器上抓取数据自动尝试合并到当前所在分支.
而我们可以也可以利用git fetch
进行本地分支所追踪的远程分支没有提交. 然后我们可以手动的进行合并.
推送
git push [remote-name] [branch-name]
例如:
只有当对服务器有写入权限, 并且之前没有人提交, 这条命令才会生效.
上面的这两个推送也好拉取也好. 如果所在分支设置了远程服务器分支的追踪, 那么可以省略掉后面的仓库名和分支名. 如果没有设置那么必须显示的指定.
远程仓库移除重命名
对远程仓库的名称进行修改
想要移除一个远程仓库,例如服务器搬走了,不再使用一个特定镜像,或者一个贡献者不再贡献
- Git 王者超神之路
- Git 王者超神之路
- Git 王者超神之路
- 超神之路
- 超神之路
- Gameloft的移动游戏王者之路
- Android的"晋升王者"之路
- Java超神之路
- Java超神之路
- 王者之争-谁是浏览器速度王者?
- 王者之相,阿根廷
- [讲故事]王者之心
- 王者之国
- 王者之争
- 王者之心
- 王者之剑cogs
- 王者系列之springMVC
- 王者之路!酷睿处理器发展历程全回顾
- 4455: [Zjoi2016]小星星
- 讲故事的用户故事样例之1
- Ubuntu-kylin 16.10 配置JDK
- MyBatis(6):MyBatis集成Spring事务管理(下)
- H264--1--编码原理以及I帧B帧P帧
- Git 王者超神之路
- Hyperledger fabric中的几个重要的角色
- “穷养”的后遗症能有多大?
- TCP/IP网络编程之UDP
- document.all用法
- 驱动开发实现修改导入表注入dll
- Oracle使用Merge into 注意事项
- 知识库--StandardContext(57)
- HyperLedger Fabric的Java Chaincode配置