本人使用git已有两年半时间,但是真正分布式使用很少,所以今天把之前的学习总结一下,并且把今后的一些技术给研究一下,主要是分支技术。
1 暂存区与工作区
暂存区是git的工作空间,在暂存区的文件受到git的控制。而git的暂存区只有一个,在分支操作的时候尤其需要注意,本人之前由于到这个点不清楚,并且对git操作不熟练,导致一个开发几个月的超大项目被误删。暂存区主要是跟踪需要跟踪的文件,
git add .
可以将所有的未被.gitignore声明的文件添加到暂存区。
2 分支操作
接下来用rust项目介绍分支操作
创建一个rust项目
cargo new TestGit
创建完成git branch -b [name] # 创建并切换到这个分支
但是切换回来遇到了错误,切换失败,所以我重新创建了main分支,但是不应该有这个问题,但是又确实遇到了,希望各位大佬帮我回答这个问题。
git切换分支一定要把修改提交,因为暂存区只有一个,如果不提交就切换,会把修改直接带过去,目标分支就会被影响,但是我记得以前如果没提交的时候会警告,暂存区不干净会禁止切换,但是我这个电脑没有任何反应,直接就可以切换git status # 查看暂存区情况
现在暂存区很干净,如果对文件进行修改,新手一定要记得提交,否则直接带到新的分支很麻烦,如果我现在对src下的文件进行修改
我进行了修改,但是没有提交,现在我切换到new分支
可以看到对文件的修改直接带过来了也就是打印main分支那行语句,这是很严重的问题,各个分支之间应该独立
如果我在main分支提交过再切换回来就没有问题了
现在暂存区已经干净了,可以正常切换
可以看到现在main文件是原来正常的,所以切换分支一定要记得保证暂存区的干净
3 关于分支合并
git merge [name] # 将name分支合并到当前分支
main分支一般都是要落后于其他分支,但是稳定
现在尝试合并new分支,如果正常,就可以再main分支看到new分支的信息
第二行的打印信息被我修改了但是没展示,不是git的问题,可以看到现在在main分支有new分支里面的信息,注意分支变换。
冲突
正常直接使用这个命令就可以合并分支,但是可能遇到合并冲突,如果两个分支对同一个文件的同一行都有修改,git不知道以谁为标准,这样就造成了冲突,需要手动解决冲突。
可以看到已经产生了冲突,因为同一行有两种代码内容,现在解决
=====上面是当前分支,下面是new分支《《《《《 中间的是冲突部分 》》》》》》现在手动处理,
冲突解决,完成合并,并且暂存区很干净
最近公共祖先
git分支合并是找最近公共祖先节点,
不要看里面的commit内容,因为我做了一些修改,主要看节点,可以看到恢复节点处有一个分支,我新拉取一个分支,如果在这上面我要merge,就会从这里开始进行合并。