命令
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
情况一
最简单和最常见的情况如下,两个分支都对项目进行了更改,但并没有更改同一文件
- 找到共同祖先节点为base(橙色节点)
- 先合并A文件,比较base中的A和dev中的A发现,dev没有对A进行更改;同样比较base中的A和master中的A发现,master对A进行更改;则只需将master中的A文件作为合并结果
- 再合并B文件,比较base中的B和dev中的B发现,dev是增加了B文件;同样比较base中的B和master中的B发现,master并没有B的相关更改;则只需将dev中的B文件作为合并结果
- 所以合并结果就是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文件的修改
现实中更多分支情况更为复杂,但慢慢分析就能知道各种离奇情况是怎么发生的了