粉丝1148获赞9769

在 idea 中摘取 get 提交记录,当前的分值是 mass 的分值,我们来看一下 tens 的分值, 这里我们可以看到基于马斯特分支有五处提交,我们现在需要把其中的一个提交记录迁移到马斯特,那我们可以选中提交记录,点击拆人 pick 呢,就是说把该提交记录迁移到当前的分支,这里我们点击一下,我们可以看到拆人 pig 成功,我们这里直接进行推送就可以了。 我们再来看一下马斯的分支,此处已经多了一个提交记录,那这个提交记录就是生日 pick 过来的,比如说现在还有一个需求是在该提交记录中迁移部分代码,我们要迁移此次提交记录中的, 根据用户 id 查询用户,那我们如果再点击插入 pick 的话,相当于是把两个功能全部进行迁移,那这种情况我们怎么做呢?我们右击 项目,然后选择刚拍的位置,不认识进行分支之间的比较,我们选中太子的分支在左侧,这里就会列举出来两个分支之间的差异,我们只需要选择要进行迁移的代码双击,在这个界面中呢,我们还是比较熟悉的, 类似于我们平时和平代码解决冲突的界面。把需要迁移的代码来选中,到右侧,把不需要的代码进行删除,这样呢就可以实现部分代码的迁移,我们就可以只要在本地进行提交和推送。第一种方式是针对单个提交记录, 把一整个提交记录进行迁移。第二种方式呢是做分之间内容比较,然后选择性的进行迁移。今天呢就分享到这,谢谢大家。

大家好,七集系列已经完结了,但今天加一集番外。 今天讲三个日常最常用的工具, cherry pick, stash, 还有 bisect。 最后我要带你回到第一集,揭示一个贯穿整个系列的秘密。先搭环境, 两个 commit。 第一个工具 cherrypick merge 是 把整个分支合进来,但有时候你只想要某一个 commit 的 改动。 cherrypick 就是 干这个的。来看场景, feature 分 支做了三个 committee, 但我只想要其中一个。 第一个,一个实验性的改动, 第二个,一个关键的 bug 修复,这个我需要第三个半成品。 feature 上有三个 commit, 但我只想把 f 二那个 bug fix 拿到 main 上。 merge 会把三个都带过来。先回到 main, cherry pick 加上 f 二的哈希成功了,只有 f 二的改动被复制过来了。 看看全貌,你看, main 上多了一个 f 二,但它的哈希不一样,因为 cherry pick 是 复制,不是移动。就像第五集 rebase 一 样,新位置新哈希 只有 fix 点 txt 过来了, x p 点 txt 和 y p 点 txt 留在 feature 上,精确打击 cherrypick 的 本质。 main 有 两个 commit, feature 有 三个 commit, 我 只想要 f 二。 cherrypick 把 f 二的改动复制到 main 上,生成一个新 commit。 f 二撇哈希不同,内容相同。 第二个工具 stash, 你 正在写代码,写到一半,同事说 main 上有个紧急 bug, 你 不想 commit 半成品,但切分之会丢掉。改动 stash 就是 临时存档来看看。假设我正在写代码,写到一半, 还改了一个已有文件,看看状态,有一个修改的文件和一个新文件。现在要去修紧急 bug, 但不想丢这些改动。 get stash 又表示连 intact 文件一起存存好了,现在看 status 干干净净,改动全被藏起来了。现在可以放心切分支去修 bug。 改动去哪了? stash list 看看在这里 stash at 零像不像 relog 的 语法。没错, stash 内部其实就是用 relog 机制实现的。看看里面存了什么, 两个文件的改动都在好,假设紧急 bug 修完了,我要把存档取回来, pop 取出来并删掉。存档 改动全回来了,就好像什么都没发生过。 stash list 呢?空了 pop 会把存档删掉。如果想保留存档,用 git stash apply 代替 pop stash 有 个有意思的内幕, stash 看起来像是一个独立的存储机制,但其实它就是在 g i t revs stash 里存了一个 commit。 哈希跟分支一样,也是一个指向 commit 的 文本文件。 来验证一下。先再 stash 一 次, 看看 git revs stash 这个文件, 一个哈希,跟分支的格式一模一样。第三集学的分支就是写着哈希的文件, stash 也是看看它的类型, commit 类型 stash 就是 commit get, 里面到处都是 commit。 stash 是 一个指向 commit 的 ref, 跟分支的原理完全一样。学了内部原理,这些工具就不再神秘了,取回来继续 清理一下,后面要用干净的环境。 第三个工具, bisect, 这个太巧妙了,你的项目有一百个 commit, 某个功能突然坏了,但你不知道是哪个 commit 引入的 bug, 一个一个是太慢。 bisect 用二分查找 log 二的一百,只需要大约七次测试就能找到。 来看,先造一个有 bug 的 历史,快速造八个 commit, c 三到 c 十 好,假设 c 六引入了一个 bug, 但我们不知道,我们只知道 c 二是好的, c 十是坏的。 十一个 commit bug 藏在其中。启动 bisect, 先 start, 当前 c 十是坏的, c 二是好的。 git 自动跳到了中间 c 五,大约还需要两步。他问你这个 commit 是 好的还是坏的? 九个 commit 的 范围,它直接跳到中间 log 二的九约等于三,所以大约三步就够了。 c 五没有 bug, 标记为 good。 c 五是好的。跳到 c 七, bug 在 c 五到 c 十之间, c 七是中间, c 七有 bug, 标记 bad。 跳到 c 六零步,剩余 c 六也有 bug。 找到了。 c six is the first bad commit。 十一个 commit 只测了三次。 精确定位到引入 bug 的 那个 commit, 然后你可以看 diff, 找到原来的位置, 回到 main 了。 bisect 期间, git 会自动 check out 不 同的 commit reset 之后一切恢复来,可试化一下 bisect 过程。九个 commit, c 二好的, c 十坏的。 第一步, git 跳到中间 c 五好的范围缩小到 c 五到 c 十。 第二步,跳到 c 七,坏的范围缩小到 c 五到 c 七。第三步, c 六坏的,左边的 c 五是好的,所以 c 六就是第一个坏。 commit 三步搞定 好,三个工具讲完了,最后我要带你回到最开始。 第一集我们学了什么? blob 是 内容的 sha 一 哈希,内容进去,钥匙出来。钥匙进去,内容出来。来,做一个实验,先做一个重要的 commit 一个很重要的文件,记住这个,哈希, e 二 f 三 a 四 b 好。现在假设我手滑了, reset card 回退一步, c 十一不见了, log 里找不到了。没有 c 十一,没有任何分支指向它。上一集我们会用 relog 找回来,但今天我想让你看到更深层的东西。 还记得第一集的 gitcat file 吗?用 c 一 一的哈西试试 commit, 他 还在,对象还在。点 g i t。 斜杠 objects 里面。看看内容,完完整整 tree, parent message 全在, 这就是关键。 reset hard 只是移动了指征,并没有删除对象,甚至文件内容也还在。顺着 tree 往下找,看看这个 tree, 三个文件 secret, 点 txt 的 blob 也在读出来, precious data 完好无损。从 commit 到 tree 到 blob 到文件内容,整个链条都在点 git 斜杠 objects 里面来看看全景。 reset 之后, main 指向 c 十, 但 c 一 一还在点 g e t。 斜杠 ob j e c t s 里面,只是没有分支指向它了,它成了一个孤儿。 顺着 c 十一找下去, tree 在, blob 在, 文件内容 precious data 也在,一切完好 relog 记着 c 一 一的哈希上一集学了怎么用它恢复。 还有一招, get fsk, 能扫描整个对象库,找到所有没有引用的孤儿对象。 最后一个恢复手段, get f s c k。 当 reflog 过期了,也能用 f s c k 加 no reflogs, 假装 reflog 不 存在。 dangling commit 一 二 f 三 a 四 b 就是 我们的 c 十一 f s c k 便利了整个对象库,发现它没有被任何 ref 引用。 dangling 就是 悬空的,没人引用的。 fsck 是 最后的手段, reflow 过期了, fsck 还能找到。现在你看到完整的图了。 第一集我们学了内容进去,哈西出来,对象一旦进了,点 g e t。 斜杠 objects 就 在那里了。 第三集我们学了分支,只是写着哈希的文本,文件指向可以移动,但对象不会消失。 把这两点加在一起,你就明白了为什么 git 里几乎不可能丢数据。 reset 只是以指针对象还在,删分支只是删指针对象还在, reflog 和 fsk 都能找到它们。 唯一的例外是垃圾回收。 git gc 会定期清理没有引用的对象,默认两周,但在这之前,一切都找得回来。好来总结这几番外。 cherrypick 只要某个 commit 的 改动,不用 merge 整个分支 stash 临时存档内部就是在 rev stash 里存了一个 commit 哈希 bisect 二分查找 bug, 一 百个 commit 只需要七次测试。最重要的一点,对象一旦进了点 g t 斜杠, objects 短期内不会消失。 reflog 和 fsck 都是你的救命稻草。 cherrypick 只拿一个 commit stash 的 本质,一个指向 commit 的 ref, 这就是整个系列的核心。对象存储是 get 的 根基,理解了它,一切都不再神秘。

早春外套推荐,个人感受,全城无广!第一件是这个美式复古几皮绒翻领夹克,领口和下摆都有这个比较流行的绑带设计,虽然面料好像是聚酯纤维,但做工细节和设计主播是认可的。 个人感觉内搭衬衫,下身西裤或者圆牛加同色系的鞋子就可以出门了。第二件是这个缪系格纹夹铜色系的鞋子就可以出门了。第二件是 t r 混纺的面料, 最最值得夸奖的是,它的抗皱性是真的不错,并且摸起来丝滑亲肤,这是主播最喜欢的一点。上身的话,主播感觉衣服包容性很强,穿上它缪系这款就狠狠拿捏了。最后一件是这个千鸟格纹哈林顿夹克,百分之六十五狄伦加百分之三十五粘胶混纺面料, 主播穿了一个月,感受就是坚固耐磨抗皱,穿着也很舒适。衣服是宽松版型,个人感觉上身搭配衬衫和棕色领带会好看一些。总的来说,三件外套都很适合早春出行穿搭,主播很认可。
