git
绝世好阿狸
这个作者很懒,什么都没留下…
展开
-
【git】极客时间学习笔记
变更的过程:工作区->(1)->暂存区-(2)->commit发生在(1):工作区相对于暂存区的变化。使用git diff,可以查看区别;使用git checkout,可以用暂存区恢复工作区;发生在(2):暂存区相对于commit的变化。使用git diff --cached,可以查看区别;使用git reset HEAD,可以使用HEAD的已提交内容恢复暂存区,暂存区的变更将会返回到工作区;使用git rm = rm + git rm;使用git mv = mv + git a原创 2020-12-06 00:29:48 · 205 阅读 · 0 评论 -
【git】blob、tree、commit
git存储三种类型:commit、tree与blobblob指的是文件,一个文件的一个版本对应一个blob对象,比如v1的版本的a.txt文件是一个blob,然后对a.txt进行了修改,重新commit为v2版本后,会多一个v2版本的blob,也就是说同一个文件,有几个版本就有几个blob对象这里也引申一下git的存储机制。首先git需要管理版本,那么需要能够恢复到之前的版本,所以可以肯定的是需要存储整个git仓库的每一个版本,有两个思路,一是存diff;二是存全量文件,也就是存快照。git使用的是后原创 2020-12-05 20:40:21 · 2278 阅读 · 0 评论 -
【git】git merge 算法 【转】
https://blog.csdn.net/u012937029/article/details/77161584转载 2018-12-29 14:33:51 · 433 阅读 · 0 评论 -
【git】rebase -i
-i指的是进入rebase的交互式模式。场景:一个feature往往会有多个commit,但是如果直接把分支push到远程,远程会有很多commit,事实上,远程的每一个commit应该代表里程碑,不应该太细,所以在push前最好能够压缩本地的commit为一个。假设:基于base版本,有了两个提交,最终想压缩为一个,那么就需要rebase到“base”版本,rebase的版本后面就会只存在一个版...原创 2018-03-21 23:24:51 · 812 阅读 · 0 评论 -
【git】checkout reset 区别
不去深究的话,就文件版本而言, checkout侧重修改工作区,而reset侧重修改暂存区。就提交版本而言,checkout全改,reset有三种选项;checkout移动的是HEAD,reset移动的是HEAD 和分支,所以光靠reset达不到游离态。...原创 2018-03-21 22:58:36 · 336 阅读 · 0 评论 -
【git】reset 命令
重置命令。有两种用法,即文件版本和提交版本。先看文件版本,也就是加了 --file,主要用于未提交的状态,通常视为了取消暂存,相当于撤销add操作,并不会修改head代表分支的指向。如果没有commit id,那么就是用使用HEAD。提交版本,无 --file参数,通常用于已经的状态。希望将head代表的分支重新指向一个提交位置。这个命令其实是一个逆向的修改文件-add-...原创 2018-03-21 22:45:40 · 513 阅读 · 0 评论 -
【git】checkout 命令
用git的时候,最头疼的就是reset和checkout。网上看了很多,但都感觉不是很清楚,最后还是从git的手册里找到了答案。其实checkout的用法就两种,一种是提交版本的一种是文件版本的。关键要搞清楚checkout修改的是哪里的代码。先看文件版本的用法,即加了 -- file 的用法:从上面的描述中可以看到:--file用法不会修改head,但是会修改工作区。如何修改工作区? 根据暂存区...原创 2018-03-21 22:13:39 · 4414 阅读 · 0 评论 -
【git】revert
这是一个在主库使用的命令,可以保存历史,同时撤销提交。git revert commit-id:这条命令的含义是,以一个“反向”补丁的形式,逆向执行commit-id的操作,最终新添加一个commit。常见的是revert HEAD,即撤销上一次的提交。那么,如果commit-id不是HEAD呢?比如v1,v2,v3是版本,revert的是v2,那么只会撤销v2里面的操作,后面依旧保留。下面验证:...原创 2018-03-31 23:18:19 · 1045 阅读 · 0 评论 -
【git】stash
虽然目前还没有特别适用过这个命令,但是还是学习一下。如果正在一个分支开发新功能,突然需要处理另一个分支,此时需要把现场保存,就可以使用stash命令,stash就会把工作区和暂存区的内容全部保存起来,压入一个栈中,工作区就完全清空了,最后可以apply拿出之前的缓存。git stash 会把暂存区和工作区压入git stash save meg,可以为这次暂存加一个信息git stash appl...原创 2018-03-31 21:32:22 · 269 阅读 · 0 评论 -
【git】pull 远程分支
一直说是fetch和merge的结合,那么分开来看下。现在origin和本地有分歧。手动模仿pull:先fetch:所以fetch说做的就是把远程分支的objects和分支名拉下来,然后分支名存在.git/FETCH_HEAD文件,相应的obj存在./git/objects下。这就是fetch所做的,接下来还需要和本地的merge。merge:这就是手动merge fetch下来的东西,最后新加一...原创 2018-03-25 17:55:15 · 405 阅读 · 0 评论 -
【git】存储原理
git与传统的版本控制工具的区别在于 分布式。每一个开发者都可以有自己的版本库,可以对自己的版本库提交,修改。对本地库的修改可以在断网的情况下进行。同时,项目组还有一个中心库,就git是分布式的,项目组也必须保证有一份最最“权威”的代码在中心库,这份代码就是稳定版本,是最终可以上线的版本。虽然git是分布式的,但是最终还会有“集中化”的味道。不过相比于传统的svn等集中式工具,git还是有优势的,...原创 2018-03-20 23:26:09 · 3787 阅读 · 0 评论 -
【git】merge 原理
查了一下git merge如何判定冲突,主要是通过找到公共祖先节点,然后两个分支各自形成一个和祖先diff的俩链表,然后逐行处理,如果恰好都改了同一行,那么就冲突。这就是最基础的3-way合并。3代表了三个文件,使用3-way合并,可以进行一些智能合并。一旦冲突了,就能知道冲突是由一方导致还是双方导致,如果是一方导致,可以直接合并,如果双方导致,就需要人工处理。如果2-way合并,因为不知道不...原创 2018-03-29 23:06:35 · 5030 阅读 · 0 评论 -
【git】patch 补丁 (cherry-pick,rebase过程)
研究这个是因为cherry-pick命令引起的。还是之前那个事情,仔细还原一下:我clone代码,然后基于master co一个dev的分支,然后开发开发开发。。。最后单元测试通过了,准备上测试环境。公司的测试环境是staging分支,然后我就本地co一个staging跟踪远程的staging分支,好了以后就需要把自己dev的分支开发的内容合到staging分支,如果staging此时和mas...原创 2018-03-29 22:39:08 · 2146 阅读 · 0 评论 -
【git】彻底搞清楚 cherry-pick -m
用于将一个存在的commit提交到一个分支。用处在于:(1)如多数人所说,有两个分支,一个是稳定版,一个是开发版,如果想把后续几个开发版的commit上线,可以使用cherry-pick把相应的commit追加到稳定版;(2)有时,测试环境和开发环境的版本不同,我们一般从master clone一个最新版本到自己的开发分支比如dev,再基于dev开发。开发完以后,需要把自己的改动放到测试分...原创 2018-03-22 21:56:58 · 11372 阅读 · 1 评论 -
【git】diff命令使用
diff是很常用的命令,现在记录一下diff的使用方法。为了便于记忆这些不同的使用方法,可以从下面的宏观的角度来记忆。diff在逻辑上需要两个参数,第一个是暂存区/工作区,第二个是提交id,在具体使用的时候,可以选择省略参数。从这里可以看出来,diff在逻辑上是用于比较暂存区/工作区和版本库中某一版本的区别的。对于第一个参数,如果加了--cached参数,表示是暂存区,如果没加,表示是工作区。1....原创 2018-03-18 21:07:53 · 868 阅读 · 0 评论 -
【git】diff命令 输出含义
diff命令结果是一种结合两个待对比文件区别的上下文的一种格式。a,b两个文件对比,那么除了会直接显示区别以外,还会显示各自区别的上下几行,这样可以可读性更强。举个例子:版本库a.txt:把最后一行修改为:bbb,然后使用git diff命令查看区别:diff --git a/a.txt b/a.txt:表示对比的两个文件名index e5331dc..9925c97 100644:index后面...原创 2018-03-18 18:47:12 · 9553 阅读 · 1 评论