Git命令与使用详细教程
持续更新中。。。。。。。。
由于是迭代开发版本,对于其中内容编排或者内容有看法的朋友麻烦在评论区里踊跃留言
目录
===基础教程===
-
Git 基本工作流程
- 基本流程介绍
- 提交修改 git add /git commit
- 添加远程仓库 git remote add
- 拉取修改 git pull
- 推送修改 git push
===进阶教程===
-
- blob
- tree
- commit
- tag
-
Git 分支管理
- 创建与切换分支 git branch
- 合并分支 git merge
- 删除分支 本地/远程 git branch -d/-D
- 解决冲突
- 分支管理策略
- git-flow分支管理策略
-
Git 远程操作
- Git 用户信息的设置
- Git的远程库配置
- Git的本地分支与远程分支对应关系配置
-
标签管理
- 标签的作用
- 标签的相关管理指令(增/删/查/)
-
Git的一些其他配置
- 忽略特殊文件 .gitignore
- 配置别名
Git简介
摘自百度
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git的读音为/gɪt/。
Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git安装
//TODO : 待编写
===基础教程===
//TODO : 待编写
===进阶教程===
Git的几种对象
Git使用40个16进制字符的SHA-1 Hash来唯一标识对象
如:dbfc931bcbfd5929114f1c7c708cfa8251cb7b4b
blob
文本文件,二进制文件或者链接文件
tree
目录
commit
历史提交版本
tag
指向某一个历史提交版本
相互之间关系:
回到顶部
=====分割线=======
Git 工作区/暂存区/版本库
工作区 /暂存区 /版本库
工作区
工作区也就是我们平时的工作目录,也就是编辑文件的地方
下面看一个工作区的实例
版本库
在工作区中有一个隐藏文件 .git , git的历史提交信息就存放在了.git 目录下, .git 又称为git 的版本库。
.git文件夹内部内容
暂存区
Git暂存区是保存修改文件的地方
Git将修改存放到暂存区,暂存区实际实在哪里呢,我们打开Git 版本库目录。
然后在工作区做些修改,并把这些修改添加到暂存区,可以看到 Stage(index 文件) 跟着发生了变动,
其实Stage(index 文件)其实记录的就是暂存的内容
版本库
下面看一张图看一下它们之间的关系:
1.将工作区修改的文件添加到暂存区
2.见暂存区的内容进行提交
3.可以用历史版本还原工作区与暂存区
查看工作区 与 暂存区 git status
git status 命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log.
在 windows git自带的命令模拟器下
对于 没有加到暂存区 / 没有被跟踪 到暂存区的文件会用红色表示
对于 加到暂存区 的文件会用绿色表示
示例:
将工作区的内容加到暂存区 git add
该部分参考以下文章 git add 文章
git add命令主要用于把我们要提交的文件的信息添加到索引库中。当我们使用git commit时,git将依据索引库中的内容来进行文件的提交。
常用的命令有
git add ( git add .)
git add -u [path]
git add -A [path]
git add . 是我在工作中最常用的指令,其实就是 git add [.] // . 即 表示当前的工作目录
git add [< path >] 表示 add to index only files created or modified and not those deleted
我通常是通过git add < path >的形式把我们< path >添加到索引库中,< path >可以是文件也可以是目录。
git不仅能判断出< path >中,修改(不包括已删除)的文件,还能判断出新添的文件,并把它们的信息添加到索引库中。
git add -u 表示 add to index only files modified or deleted and not those created
git add -u [< path >]: 把< path >中所有tracked文件中被修改过或已删除文件的信息添加到索引库。它不会处理untracted的文件。
省略< path >表示.,即当前目录。
git add -A: [< path >]表示把< path >中所有tracked文件中被修改过或已删除文件和所有untracted的文件信息添加到索引库。
省略< path >表示.,即当前目录。
工作区/暂存区/历史版本 对比 git diff
git diff 工作区 与 暂存区 之间的差异
git diff –cached (HEAD) 暂存区 与 历史提交(头指针所指向分支的差异) 之间的差异
git diff HEAD 工作区 与 历史提交(头指针所指向分支的差异) 之间的差异
git diff [ – cached ] [Commit ID ] – file xx 与 yy 指定文件 之间的差异
初始状态
Step1 修改工作区中的文件
修改test1 test2 各加入一行 Hello world
git status 查看工作区/暂存区的状态
查看 工作区 与 暂存区 之间的差异 git diff
绿色表示 工作区
红色表示 暂存区
查看 暂存区 与 历史提交 之间的差异 git diff – cached
查看 工作区 与 历史提交 之间的差异 git diff HEAD
红色 表示 历史提交
绿色 表示 工作区
Step2 将工作区的修改提交到暂存区
将修改加到暂存区中
查看 工作区 与 暂存区 之间的差异 git diff
查看 暂存区 与 历史提交 之间的差异 git diff – cached
查看 工作区 与 历史提交 之间的差异 git diff HEAD
Step3 提交一个新版本
由于新提交了一个版本,所以
查看 工作区 与 暂存区 之间的差异 git diff
查看 暂存区 与 历史版本 之间的差异 git diff – cached
查看 工作区 与 历史版本 之间的差异 git diff HEAD
都不存在差异
回到顶部
=====分割线=======
Git 查看提交记录
Git提交 git commit
参考文章
1.git commit 命令详解
2.commit 信息的书写规范
.
Git 提交 / Git commit
git commit
提交 暂存区中的文件,
不包括工作区未加入暂存区的文件(tracked file) , 工作区未被追踪的文件(untracked file)
git commit -a
提交 暂存区中的文件 / 工作区中被追踪的文件(tracked file) ,
不包括 工作区中未被追踪的文件(untracked file)
git commit -m “commit message” 提交时简写提交信息
Step1 git commit
git commit 测试,同时修改 test1.txt , test2.txt 两个文件
git add text.txt 加 text.txt 加入到 暂存区
git status 查看现在 暂存区的状态
git commit 将暂存区的文件提交上去
填写commit 描述信息
利用git status ,可以看到 test.txt 并没被提交上去
Step2 git commit -a
git commit -a 测试, 同时修改 test.txt test2.txt 加入一行内容, 并新建一个test3.txt 文件
将test.txt 加入到暂存区中, 利用git status 查看工作区与暂存区的状态
git commit -a 强制将暂存区 与 traked但是没被加入到暂存区的文件 提交上去 , 不包括 untracked 文件 (未被追踪的文件)
填写提交信息
git status 查看提交之后的工作区与暂存区,可以发现 test3.txt 并没有提交上去
Git commit 的书写规范
七条很棒的 git 提交信息规则
用一个空行隔开标题和正文
限制标题字数在 50 个字符内
用大写字母写标题行
不要用句号结束标题行
在标题行使用祈使语气
正文在 72 个字符处换行
使用正文解释是什么和为什么,而不是如何做
查看版本提交内容 git show
git show [options] < object >…
Shows one or more objects (blobs, trees, tags and commits).
用来显示不同的对象具体内容,可以显示 blobs(文本) trees(目录) tags(标记) commit(提交)
示例:
git show commitID
git show trees
git show blobs
Step1 构建测试例子,如图
Step2 通过git log –oneline 查看历史提交记录
Step3 git show commitID 查看某个历史版本的提交内容
Step4 git show trees 查看文件夹中的修改
先用git ls-tree commitID 看下tree 对象的 SHA-1 hash
再用git show tree 对象 去看里面的内容
Step5 git show blobs 查看文本文件 以及 文本文件的变动
查看目录中对象的SHA-1 Hash git ls-tree
git ls-tree objects (blobs / tree / tag / commit ) 可以快速的查到 blob/tree 对象 的 SHA-1 hash 码
git ls-tree commit
git ls-tree tree
git ls-tree object
示例:
git ls-tree commit
git ls-tree tree
git ls-tree object
查看提交记录 git log / git reflog
参考文章:
1.Git log 详解 https://www.cnblogs.com/gbyukg/archive/2011/12/12/2285419.html
2.Git 命令详解(5) - git log
http://blog.csdn.net/wh_19910525/article/details/7468549
git log [< options >] [< revision range >] [[ –] < path >…] git 查看 完整的 历史提交信息
git reflog < subcommand > < options > 记录 HEAD头指针 的引用信息
git log 与 git reflog 的区别
git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录。
git log则不能察看已经删除了的commit记录
git log 常用参数
git log
1.B向上翻页
2.F向下翻页
3.Q退出
4.回车(enter) 单行操作
-n
(n是一个正整数),查看最近n次的提交信息
-p
选项展开显示每次提交的内容差异
[–] < path >… / – fileName (简写)
fileName为任意文件名,查看指定文件的提交信息。(注:文件名应该放到参数的最后位置,通常在前面加上–并用空格隔开表示是文件。)
–branches[=< pattern >] / branchName (简写)
默认: 不加参数只显示 当前分支 的提交记录
branchName为任意一个分支名字,查看莫个分支上的提交记录。同上,需要放到参数中的最后位置处。(注:如果分支名与文件名相同,系统会提示错误,可通过–选项来指定给定的参数是分支名还是文件名。
–author=someone
查询指定作者的提交记录
–pretty
按指定格式显示日志信息,可选项有:oneline,short,medium,full,fuller,email,raw以及format:< string >,默认为medium,可以通过修改配置文件来指定默认的方式。
选项 说明
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用 -date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
示例:git log –pretty=format:”%an %ae %ad %cn %ce %cd %cr %s” –graph
–since,–affter 仅显示指定时间之后的提交(不包含当前日期)
–until,–before 仅显示指定时间之前的提交(包含当前日期)
示例: git log –before={3,weeks,ago} –after={2010-04-18}
–stat 列出文件的修改行数
–graph 以简单的图形方式列出提交记录
常用组合指令
–oneline –decorate –graph –all
–decorate 引用的信息
–graph 图形化的信息
–all 所有分支的信息
git log 示例
git log
git log -p 显示提交之间的差异信息
git log –pretty=online 对于 每条 提交信息 只用一行显示
git log –branches[=< pattern >]
git log –author=someone
git log –since
–since 不包含指定日期
–before 包含指定日期
git log –before={3,weeks,ago} –after={2010-04-18}
复合指令
git –oneline –decorate –graph –all
git reflog 示例
git reflog 维护了 头指针 HEAD 的移动记录
回到顶部
=====分割线=======
Git 管理 修改与历史
git checkout 还原工作区
参考文章:
1.git checkout 命令详解
https://www.cnblogs.com/hutaoer/archive/2013/05/07/git_checkout.html
2.Git学习笔记04–git checkout
https://www.cnblogs.com/craftor/archive/2012/11/04/2754147.html
3.代码回滚:git reset、git checkout和git revert区别和联系
https://www.cnblogs.com/houpeiyong/p/5890748.html
用法一:git checkout [ -q ] [< commit >] [ – ] < paths >…
用法二:git checkout [< branch >]
用法三:git checkout [ -m ] [ [ -b ] –orphan ] < new_branch >] [< start_point >]
最常见用法:
git checkout BranchName 检出分支。实质:用Branch 所指向的分支 的最新提交 还原工作区 与 暂存区
git checkout CommitID – < file > … 用 某个历史提交 还原 工作区 与 暂存区
git checkout – < file > … 用 暂存区的文件 还原 工作区
示例
git checkout BranchName 检出分支
git checkout CommitID – < file > … 用 某个历史提交 还原 工作区 与 暂存区
查看提交日志,查看 test.txt 文件,选择合适的检出版本
检出历史提交版本的 test.txt , 查看 工作区 / 暂存区 / 历史版本 之间的差异
查看工作区中检出的 test.txt 文件
还原至最初始的状态
Step1 用HEAD 还原暂存区
Step2 用暂存区的 test.txt 还原工作区
git checkout – < file > … 用 暂存区的文件 还原 工作区
对工作区做一些修改
然后用 暂存区 还原 工作区
git reset 还原暂存区
git reset BranchName 用Branch 所指向的分支 的最新提交 还原 暂存区
git reset CommitID – < file > … 用 某个历史提交 还原 暂存区
..
git revert 重写历史,产生新的提交,覆盖之前提交
git revert HEAD 将上一次的提交所做的修改, 全部撤销。产生一个新的提交,覆盖之前的提交。
git clean 删除未被跟踪的文件
git clean 清除 .gitignore 之外的文件
git clean -n
git clean -f
回到顶部
=====分割线=======
回到顶部
=====分割线=======
欢迎使用Markdown编辑器写博客
本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:
- Markdown和扩展Markdown简洁的语法
- 代码块高亮
- 图片链接和图片上传
- LaTex数学公式
- UML序列图和流程图
- 离线写博客
- 导入导出Markdown文件
- 丰富的快捷键
快捷键
- 加粗
Ctrl + B
- 斜体
Ctrl + I
- 引用
Ctrl + Q
- 插入链接
Ctrl + L
- 插入代码
Ctrl + K
- 插入图片
Ctrl + G
- 提升标题
Ctrl + H
- 有序列表
Ctrl + O
- 无序列表
Ctrl + U
- 横线
Ctrl + R
- 撤销
Ctrl + Z
- 重做
Ctrl + Y
Markdown及扩展
Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ * ]
使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。
本编辑器支持 Markdown Extra , 扩展了很多好用的功能。具体请参考Github.
表格
Markdown Extra 表格语法:
项目 | 价格 |
---|---|
Computer | $1600 |
Phone | $12 |
Pipe | $1 |
可以使用冒号来定义对齐方式:
项目 | 价格 | 数量 |
---|---|---|
Computer | 1600 元 | 5 |
Phone | 12 元 | 12 |
Pipe | 1 元 | 234 |
定义列表
- Markdown Extra 定义列表语法:
- 项目1
- 项目2
- 定义 A
- 定义 B
- 项目3
- 定义 C
-
定义 D
定义D内容
代码块
代码块语法遵循标准markdown代码,例如:
@requires_authorization
def somefunc(param1='', param2=0):
'''A docstring'''
if param1 > param2: # interesting
print 'Greater'
return (param2 - param1 + 1) or None
class SomeClass:
pass
>>> message = '''interpreter
... prompt'''
脚注
生成一个脚注1.
目录
用 [TOC]
来生成目录:
数学公式
使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.
- 行内公式,数学公式为:
Γ(n)=(n−1)!∀n∈N 。 - 块级公式:
更多LaTex语法请参考 这儿.
UML 图:
可以渲染序列图:
或者流程图:
离线写博客
即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。
用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。
博客发表后,本地缓存将被删除。
用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。
注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱。
浏览器兼容
- 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
- IE9以下不支持
- IE9,10,11存在以下问题
- 不支持离线功能
- IE9不支持文件导入导出
- IE10不支持拖拽文件导入
- 这里是 脚注 的 内容. ↩
上一篇: git 基础最详细使用教程
推荐阅读
-
Linux下memcache编译安装与基本使用教程
-
Linux系统中的mount挂载磁盘命令使用教程
-
Linux系统中cat命令使用的实例教程
-
Linux中虚拟内存查看命令vmstat的使用教程
-
Mybaits 源码解析 (十)----- 全网最详细,没有之一:Spring-Mybatis框架使用与源码解析
-
Substance Painter 2019如何激活?Substance Painter 2019安装激活与使用教程
-
Neat Image磨皮功能如何使用?Neat Image详细教程(针对初学者)
-
OBS直播软件怎么使用 OBS视频直播软件详细使用教程【图文+视频教程】
-
Shell中set与shopt命令选项的含义和使用示例
-
git基本使用及分支切换命令