Git相关记录

命令

git本分支不想推送,但想切分支

如题 参考文档

git stash 将当前工作区的更改保存到Git的临时存储区(stash)中
git checkout <branch_name> 切换到目标分支
git stash pop 将之前保存的更改从临时存储区中还原到工作区

使用git add .提交大文件,想看进度

提交大文件时,就一个光标在那闪,像卡住一样

git add --verbose . 这样可以看到正在提交的文件

复制出新分支

做新功能需要新分出一个分支
但本地还有一些未提交的内容不想被复制

尝试了结合上一问答和这篇文章
结果是复制完 新分支没有问题出 回到旧分支 修改的部分是可以正常恢复的,新增的部分不见了(还好我备份了一份)
解决办法在下面

正在开发的新功能突然滞后

正在开发的新功能突然说后推了,如果要修改bug或开发其他新功能怕会有同文件修改,切分支太麻烦了

git stash 将当前工作区的更改保存到Git的临时存储区(stash)中
git stash pop 将之前保存的更改从临时存储区中还原到工作区
咦?似曾相识
如果有新增文件stash是不会进行存储的
需要先git add .将新增文件暂存,也是为新增文件添加了版本控制 .表示缓存所有,也可以换成指定的目录或文件
再进行git stash即可存储所有

合并策略

今天合并代码的时候出现了文件消失的问题
看了这篇文章
自己再整理下,更白话一点

git合并时会根据情况自动选择合并策略,当然你也可以通过git merge -s <策略名>指定

Fast-forward

最基本的合并策略,自上次合并后,只对其中一个分支进行了更改,直接将更改内容合并就好了
在这里插入图片描述

Recursive

情况一

最简单和最常见的情况如下,两个分支都对项目进行了更改,但并没有更改同一文件

  1. 找到共同祖先节点为base(橙色节点)
  2. 先合并A文件,比较base中的A和dev中的A发现,dev没有对A进行更改;同样比较base中的A和master中的A发现,master对A进行更改;则只需将master中的A文件作为合并结果
  3. 再合并B文件,比较base中的B和dev中的B发现,dev是增加了B文件;同样比较base中的B和master中的B发现,master并没有B的相关更改;则只需将dev中的B文件作为合并结果
  4. 所以合并结果就是dev的B和master的A
    在这里插入图片描述
情况二

情况较为复杂,在上一次合并的基础上两个分支都行了修改
那猜猜合并结果是啥
在这里插入图片描述

(A’'C)

  • 需要找到基准base,往前找其两分支的最近唯一共同祖先节点,其实还是橙色节点
  • 以橙色节点为base对(dev.AB)和(master.A’)进行三项合并,得出一个临时的base节点(A’B)
  • 再用临时base和需要合并的两节点进行三项合并
  • 只看B文件,base和(dev.A’'B)比较发现并没有对B进行修改,和(master.A’C)比较发现对B进行了修改(删除),所以应用master对B文件的修改

现实中更多分支情况更为复杂,但慢慢分析就能知道各种离奇情况是怎么发生的了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值