写在后面:最近看了一个对于 Git 的教程,对 Git 的各项操作有了较全面的理解,当然和理论工作还有差距,在此做一个小结义工之后温习。
Git 的介绍和装置就不在赘述。
Git 本地仓库的创立及配置
抉择一个文件门路进入命令行输出git init
, 及实现了一个本地仓库的初始化。此时会生成一些暗藏文件夹,对象库和配置文件等都在其中。
而后进行一些根本信息的配置
git config --global user.name "输出姓名"
git config --global user.email“输出邮箱”git config --global color.ui true // 此处是关上色彩差别选项
Git 三大逻辑区
- 工作区:以后分支下新建或批改文件的中央,当切换到不同分支工作区会刷新。文件状态有两种:untracked,tracked
-
版本库:
- 暂存区:及 index,当执行
git add .
时,工作区的所有文件被提交到暂存区,objects 会生成若干个 blob 对象,暂存区只是对他们的索引(指针)。 - 仓库:当执行
git commit -m "提交信息"
时,会生成一个 commit 对象,外面蕴含了提交者的信息、指向 blob 的指针,指向上一次提交的指针等,若提交的内容中有子文件夹,则会蕴含 tree 对象,tree 对象中的内容为指向子文件夹中文件绝对应的 blob。
- 暂存区:及 index,当执行
Git 三大对象
次要阐明在上一节已有形容具体看图。
Git 的根本流程
- 在工作区新建或批改了文件。
- git add xx.xx ; 把文件提交到暂存区
- git commit -m “XXX” ; 把暂存区的文件提交到本地仓库
- git log;查看提交日志
文件治理
-
文件增加
- 增加一个文件:git add file.c
- 增加所有文件:git add .
- 作用:将文件增加进暂存区,文件进入 tracked 状态
-
文件提交
- 单步提交:git commit -m ” commit infor”
- 一次性提交:git commit -a
- 批改最初一次提交:git commit –amend
- 作用:将 暂存区 的所有内容提交到仓库
-
文件删除
-
从工作目录和暂存区删除:git rm -f file.c
- 删除并提交后,该文件就不再被版本库追踪,然而版本库中依然有这些文件的快照
- 从暂存区中删除,工作目录中保留:git rm –cached file.c
-
从版本库中删除: 版本回退到谬误提交前的版本
- 撤销到暂存区:git reset –soft SHA1
- 撤销到工作区:git reset –mixed SHA1
-
-
文件重命名:git mv old_name new_name
- 相当于创立(拷贝)新文件,删除旧文件
-
设置疏忽文件
有些文件(编译的两头文件、临时文件)不想被提交。
手动创立.gitignore 文件,在文件中编辑,上面是一些举例:# 正文 *.[ao] #疏忽某种格局结尾文件例如 a 或 o!clib.a #某个库文件除外,不疏忽 *~ #疏忽临时文件 /text #疏忽根目录下的某个文件 libs/ #疏忽某个目录下的所有文件
编辑实现后提交到仓库即可实现。
-
差别比拟
-
比拟工作区和暂存区差别:git diff
- 查看尚未暂存文件有哪些新的批改
-
比拟暂存区和版本库差别
- git diff –cached [HEAD]
- git diff –staged SHA
- 比拟工作区和版本库差别:git diff HEAD(或者 SHA1)
- 比拟两个版本之间差别:git diff SHA1 SHA2
-
-
压缩仓库:git gc
- 在日常运行中,git 快照会占用磁盘空间,Git 会在增量存储单元中存储批改, 节俭磁盘空间。
分支治理
分支的实质是指向 commit 的一个指针。
一个我的项目在 master 上进行演进提交,当多人合作开发或 bug 修复时,须要从 master 上开拓一条新分支,当工作实现时,再合并到 master 上。
-
创立分支:
- git branch new_branch #必须要在 master 上
- git checkout –b new_branch #创立并跳转到新分支上,必须要在 master 上
- git checkout –b new_branch old_branch
- 查看分支:git branch [-a]
-
切换分支:git checkout branch_name
- 切换分支时,工作区和暂存区的文件应全副 commit,否则会切换失败
- 分支重命名:git branch –m oldbranch newbranch #参数 - M 为强制转换
- 删除分支:git branch –d branch #- D 强制删除
-
分支合并:git merge test #合并 test 分支到 以后 分支
- 若合并过程中发生冲突,则应手动解决抵触,再 commit 提交即可。
-
压合合并:git merge –squash test
- 将一个分支上的所有历史合并为一个提交,然
后合并到另一个分支上,个别 bug 或新性能分支都能够应用这种形式合并。
- 将一个分支上的所有历史合并为一个提交,然
-
筛选合并:
- 筛选一个提交,增加到以后分支
git cherry-pick SHA
(SHA 为筛选的提交的哈希值)
- 筛选一个提交,增加到以后分支
-
分支衍合:扭转以后分支的基分支。举个例子,当 master 分支再版本 A2 时创立了一个新分支 dev,而后 master 分支持续演进到 A3,dev 分支也在演进,当 dev 分支想更新基于 master 分支的版本时:
git checkout dev
git rebase master
如果有抵触,则解决抵触,而后
git add .
git rebase --continue
此时 dev 的基分支为 master 的 A4
永远不要衍合曾经 push 到公共仓库的更新 -
分支批改储备
- 保留以后分支的数据,切换到别的分支去:
git stash
- 复原以后分支数据:
git stash apply
- 当屡次应用 stash 命令时,查看储备队列
git stash list
,清空储备队列git stash clear
, 复原某次储备git stash apply stash@{数字}
- 保留以后分支的数据,切换到别的分支去:
-
复原已删除的分支提交 / 脱离组织的提交
- 分支删除的实质:分支这个指针曾经删除,但 commit 对象还存在,只是脱离了 commit 链表而已,变成了悬空对象。
-
操作步骤
- 先找到脱离链表的 commit:
git fsck --lost-found
- 查看是否时想要复原的哪个 commit:
git show SHA
- 衍合:
git rebase SHA
- 先找到脱离链表的 commit:
- 提交能够找回,然而分支是找不回的。
近程仓库
近程仓库是指托管在因特网或其余网络中的你的我的项目的版本库。
本地仓库于近程仓库的通信协议有三种:
- SSH 协定:同时反对读和写的网络协议,Git 默认应用的网络协议。
- Git 协定:Git 自带的网络协议:实用于不须要对读进行受权的大型项目。
- HTTP/HTTPS 协定。
SSH 密钥生成:
- 用户目录下查看有没有.ssh 文件夹
- 应用命令生成:
ssh-keygen -t rsa –C "邮箱"
- 私钥保留在用户目录下,SSH 连贯服务器时应用
- 公钥放到服务器,服务器不同配置管理不一样
本地治理命令:
- 验证 key 是否增加胜利:
ssh –T git@github.com
- 从近程仓库克隆:
git clone repo_addr
- 增加近程仓库:
git remote add origin 仓库地址
-
从近程仓库拉取数据:
- 主动本地 master 分支并跟踪近程仓库 master 分支:
git clone origin
- 只拉取到本地,不合并:
git fetch
- 主动拉取分支更新:
git pull
- 主动本地 master 分支并跟踪近程仓库 master 分支:
- 推送到近程仓库:
git push origin master
- 在本地查看近程仓库信息:
git remote -v
- 删除本地的近程仓库的链接:
git remote rm 名字例如 origin
- 近程仓库重命名:
git remote rename old_name new_name
远程管理命令:
-
近程分支创立,将本地新建分支间接推送到近程仓库:
git push origin local_branch:remote_branch
- 近程仓库没有这个分支,将创立这个分支 origin/remote_branch
- 并将本地分支和近程分支建设关联,当前能够间接 push
-
基于近程分支建设一个本地关联分支:
git checkout –b local_branch origin/remote_branch
- 建设关联后,就能够间接进行 pull 和 push
-
删除近程分支:
git push origin :remote_branch(近程分支名)
标签
标签是一个援用,标签对象能够指向任何对象,通常状况下,是指向一个提交(commit)。
- 在以后分支的末端创立轻量级标签:git tag v0.1
- 给指定某个 commit 打标签: git tag V0.2 SHA
- 删除标签:git tag -d v0.1
- 推送标签到近程:git push origin v0.2
- 推送所有标签:git push origin –tags
-
删除近程标签:
- 先删除本地:git tag -d v0.1
- 在删除近程:git push origin :refs/tags/v0.2