起因
因为,我同事它对git不熟,所以,特意来找我来帮帮他解决问题,所以,我就去了,他要下载一个仓库代码,但是仓库的默认主分支不是他想要的,他想要的是一个xxxx&yyyy&zzzz的分支,所以,我然后直接
1 | git branch -a |
问题来了,我确实看到了remote的 xxxx&yyyy&zzzz分支,但是,无法执行,它告诉我指令不存在。所以,一时间有点懵逼,我还特意使用
1 | git clone -b xxxx&yyyy&zzzz https://..... |
去下载特定分支,发现也失败了。我都懵了的时候,我尝试切换其他分支,成了,我就知道,是命令行输了呢。呜呜呜,竟然让GUI赢了一把。大家应该发现了问题了吧!没错就是&。
github管理 | 我要成为嵌入式高手(csmznbo.top)这是我上一期关于git的入门操作哦,有兴趣的可以看一下。
& | && ||
&:一旦shell指令识别到&就会把后面那些当成指令看待,所以,可以做一个测试,新建一个 ls&cat README.md 的文件夹。对这个文件夹执行ls,就会发现,它执行了cat操作了,注意力此时cat是占据当前进程的,所以,如果后面没有+文件的话,你的中断就会堵塞卡死。注意了,如果一个子线程,直接使用system没有+&,那么这个子线程就会堵死,但是不会影响其他线程哈哈哈。你懂我什么意思的,这确实是一个搞人的手段,尤其可以选择在md后面也加一个&。这样就是两个后台工作了。偷偷摸摸后台搞事情哦。
|:管道,就是前面数据给后面,注意力,文件夹和问价不能用|来命名,所以管道操作实现不了哦
&&:命令行的与操作,经典断路
||:命令行或操作,经典短路
解决&的方法就是+ “”双引号框起来就好了。
git仓库版本问题
我们可以把git粗略分为用户和系统两个部分,那些文件,代码,数据都是用户添加,属于用户层面,可以随意修改。但是.git文件夹里面就不行了,里面保存所有历史记录和操作,不能随意修改,如果只是本地无所谓的,但是要和云端同步的话,就麻烦了。
如果本地仓库没有远程仓库的所有历史记录,那么push就是失败,就是说提交的版本一定要大于而包含远程版本才能提交。所以,别人抢先push了,你记得得git pull之后才能提交,就是包含别人的版本。
如果要想修改提交的云端历史记录就没办法了。因为你修改之后,你是想要进行git pull之后才可以push的,此时就会强行修正过来,导致对历史提交修改全部被纠正。因为此时两个版本对不上,提交是错误的。
真的有不得不修改的数据,那就只能强行推送覆盖云端,但是这样会把别人的记录也可能覆盖了,这是一件非常不提倡的事情。而且非常危险。
git 版本和 git tag
这个git 版本就是一个时刻的仓库的切片,一些重要的版本级别的仓库,这些是可以选择进行版本设置,这样就快速保存可用的版本,也方便回溯,分别下载,方便使用等诸多好处。
tag就是标签,这个版本有啥,这个版本怎么样,都是可以打上标签的。
pr的评论和保护分支机制
我们可以在设置添加对分支的保护,添加管理员也不能违反,这样就可以杜绝直接本地就提交覆盖分支,而是只能通过pr来实现合并,在添加,评审人评论和同意才能合并方案,就可以有效防止恶意分支合并和覆盖。
git查看提交代码量和次数
1 | 提交代码量 |
git冲突
总有些家伙啊,意见不合,就导致了冲突,常见了的文件缺失,内存冲突,版本问题带来的冲突,此时就要进行合并才行。这些都是需要手动解决的,此时就去到冲突的文件中手动删除冲突部分,它会贴心的告诉用<<<<<<和>>>>>>来告诉那些是当前的分支,那些是要合并的分支。跟冲突的人协商之后,进行选择性的删除和添加就解决冲突了,保存提交推送就好了。
总结
git是一个好东西呢,确实分布式系统,一开始上手都是有点懵逼的,充分理解git的工作原理和运行逻辑,处理方法,真的香啊,linus是真的伟人,真的牛人,linux系统+git系统,真的是令人敬佩。