git个人学习笔记

git是什么

git版本控制库,协同开发工具
最近迷上看官网文档,因为实在现在的博客大多都只是讲自己学习到的一知半解,大多是凑字数的口水文,而且一部分还是挖了坑等你去跳,作为小白实在是看不下去了,从入门到放弃,所以自己整理了一些关于git的基本知识和操作。

自从上次在博客中跳入坑后从官网上找到答案,就不想再去看那些口水文了,迷上了去官网寻找答案,虽然是英文,但是,一点也不怂(装的!),趁着最近学习git操作,所以也研究一下git的官方操作详解

首先,了解一下git的结构,git作为一个版本控制库,结构主要分为三个部分。

clipboard.png
这三个部分一般被人称为:工作区、暂存区、仓库
一般创建完仓库后会生成.git文件夹,主要存放版本信息、更新记录、HEAD等信息,主要上要结构如下图所示

clipboard.png

命令详解

接下来看一下官网给的常规操作帮助 git --help

clipboard.png
其实对于有经验的人来说,这些命令给得已经挺详细的了,如果能够看得懂这些命令,git的基础操作基础是没问题的,更多是只是平时操作方式的一个积累。
所有常用的命令都在这里
分成了五个部分
start a working area(创建一个工作区)
work on the current change(操作当前的变化)
examine the history and state(检查历史和状态)
grow mark and tweak your common history(增长标记和调整共同历史)
collaborate(协作)

clone   克隆一个仓库到一个新的目录
init   创建一个空的仓库或重新初始化一个已存在的仓库

add   将工作区(working tree)的文件内存添加到暂存区(index)
mv   移动或重命名
reset   重置当前HEAD到一个特定的状态/版本
rm   从工作区或暂存区删除文件

bisect   使用二分查找法查找介绍bug的提交
grep   打印匹配模式的行
log   显示提交日志
show   显示各种类型的对象
status   显示工作区的状态

branch   罗列、创建或删除分支
checkout   切分分支或恢复工作区的文件
commit   记录修改到仓库
diff   显示不同提交之间,提交跟工作区之间的修改
merge   合并两个或多个开发版本
rebase   把一个分支的修改合并到当前分支(这一名不知道怎么翻译~~)
tag   创建、罗列、删除或验证GPG签名的标签对象

fetch   从另一个仓库(远程仓库)下载文件对象和引用
pull   从另一个仓库或本地分支fetch并整合(相当于fetch+merge)
push   沿关联对象更新远程文件

可以了,先写这么点
周末再更新


分割线·····························································································
周五晚,利用的时间再写一点

上面已经列出了git的全部基本命令,其实一点都不复杂,学用的那些操作也就几个:
add   commit   chekcout   merge   branch   remote   clone   status   log   fetch   pull   push
差不多就这些吧,不用被吓到,其实每个命令都是固定的操作套路。

学一个命令
只需要会用它的-help跟能有点英语基础就好了~

比如add
通过 git add -h

clipboard.png


2019年5月29日0:1:34
闲着没事,突然想到了这个总结只写了一半-.-! 趁现在有点时间就再整理一下。
接下来分别针对一些常用的命令进行总结,主要写命令的常见操作。

init

git init 命令其实算是用得比较少的一个命令,主要用来创建git仓库,一般创建完仓库就不需要用到了,这里我们通过git init -help看一下它的命令帮助

clipboard.png

init 最常用的用法无非是以下两种方式。

git init 
git init --bare (创建空的仓库)初始化完成后便会在当前目录生成一个.git文件夹,即版本控制库

--template <template-directory>表示以一个模板来创建仓库
-q 是静默模式

add

我们创建完版本控制库后,就可以开始在工作区上开发,平时我们添加代码、修改代码和删除代码就是在工作区中进行的。我们前面说过了,git版本控制库主要由三个结构组成:working/index/rep,index区保存工作区内容的快照,并将此快照作为下一次提交的内容,因此在对工作目录进行任务更改之后,在进行commit命令提交到rep之前,需要执行add命令将任何新的或修改的文件添加到index中,add命令做的事情就是将我们当前工作区working所做的修改添加到暂存区index中。

clipboard.png

参数详解

-n 排练,只是模拟操作,不真正提交到暂存区。
-v 操作时打印详细日志
-i 这个是交互模式选择内容添加到索引,这个交互模式挺方便的,后面单独讲。
-p 这个同样是通过交互模式挑选补丁,并添加到索引。使用户有机会在将修改后的内容添加到索引之前查看差异。这里是直接跳过-i的命令选择界面直接进行patch命令。
-e 直接编辑并应用到索引 ,这个没用过。
-f 强制,允许添加.ignored文件上忽略的文件
-u 更新索引,只允许应用跟踪文件的更改,不能添加新的文件到索引
-N 只添加路径,但不更新内容
-A 所有
--refresh 不添加,只刷新索引的状态信息
--ignore-removal 添加当前工作区到索引,但不添加移除
--ignore-errors 跳过添加错误的文件

基本操作

1、git add -A 添加当前工作区所有修改到索引,主要平时工作中不推荐直接执行这个操作,因为工作区相对来说修改频繁,并且会比较混乱,如果执行这个操作,那么可能会将一些不该添加的文件添加到索引中.
2、git add -i 交互模式挑选修改到索引,使用这个模式来添加索引时非常方便,可以自由选择修改到索引,可以选择update(更新),revert(还原),add untracked(添加未跟踪文件),patch(补丁),diff(查看索引与工作区不同)等

clipboard.png

选择2直接进入update命令,挑选要工作区的修改应用到索引的修改

clipboard.png

挑选完成后,选项前面会有个*标识,直接enter便能够回到上一个命令选择界面。

commit

上一个操作add所完成的任务就是将工作区的修改添加到索引inde中,而当前所要介绍的commit就是将索引提交到本地仓库rep中。

clipboard.png

相较于其他命令来说,commit的可选选项比较多,但其实一部分选项都是与其他命令重复的,而且常用的也就那么几个,这里重点讲一些前面没有解释过的。

参数详解

-C (主意是大写C) 这里主要复用指定的commit提交信息,包含评论,作者,日期
用法是 git commit -C <commitId>(commitId为之前提供过的commit的id)
-c (小写c)这个选择跟-C相似,但不同的是它可以在指定的commit的提交信息基础上重新编辑提交信息。
--reset-author 修改提交信息的作者,可以与-C、-c、--amend一起使用
-i 添加指定文件的修改到索引,这个说白了执行的就是git add xxxfile
--interactive 这个东西是互动模式,跟git add -i是一样的
-o 只将指定路径的文件提交到暂存区,忽略暂存区中其他路径暂存的内容。
-n 绕过提交前的勾子
--short 只显示很少的信息
--branch 显示当前分支的信息
--amend 重新提交上一次的提交,相当于取消上一次的提交,然后再重新提交一遍,这个命令非常好用,一般用在提交后发现有些修改未提交、或是提交后发现代码有误但不想再开启另一个commit的情况下使用。

常用命令
git commit -m "msg"    提交commit,comment为msg
git commit --amend "msg"    重新提交先前的一次提交。

reset

reset 即重置的意思,使用这个命令可以重置工作区、索引以及HEAD

clipboard.png

命令详解

--soft 重置HEAD ,git commit提交成功,HEAD的指向会重新定位到最新的提交上,这里主要用于撤销前n个提交,并将head重置回之前的某个提交上,命令格式为 git reset --soft HEAD^ ^的个数表示前几个提交,也可以使用另一个格式 git reset --sort HEAD~n(n表示前n个提交)
eg:撤销前两个提交 git reset --soft HEAD^^git reset --soft HEAD~2
--hard 重置整个仓库,这里会将工作区、索引、HEAD全部重置到上次n次提交的状态,用法同上
--mixed 重置索引、HEAD
--keep 重置HEAD,如果索引和上次提交之间不同的文件具有本地修改,那么将不会执行。
-p 重置补丁所作的修改,这与git add -p 是相反的操作

常用命令

git reset --soft
git reset --mixed
git reset --hard

branch

git 分支,一般来说项目不可能只有只一个分支,都是多个分支同时维护来应用项目的不同版本,branch主要用来完成创建分支、切换分支等操作

clipboard.png

命令详解

-t 创建出一条跟踪当前分支的新分支,这个命令与git checkout --track xxx 相同效果
--set-upstream 目前是deprecated,更换为-u,效果同上
-r 列出远程分支
--contains 列出包含某个commit的所有分支
-d 删除
-D -d的升级版,强制force
-m 移动或重命名一个分支(-M是升级版,自带--force)
--list 列出分支
--merged
--column
--sort
--points-at


未完待续


VLoye
51 声望5 粉丝