git微进阶
git微进阶技巧
作为程序员git属于是我们工作生活中的一个必备技能,但是看过网上的大部分教程后,基本上还是只会git pull和git push 换着来用。而在真正上手做了之后,随着自己不断的使用又会遇到许多问题。本贴便是对这些问题的记录
gitignore文件的正确修改
可能大家会觉得:”这有什么的,文件修改我还能不会嘛?”.哎,别急,各位言之过早了一点。这说明在座的各位还没有还没有经历过这个情况。
作为一只菜鸡,我们在使用git管理文件的时候可能会忽略掉gitignore的作用,而只有当我们在想起来类似于target,log等文件没必要上传的时候,才会猛然想起在gitignore中添加规则,但是这个时候我们往往会发现gitignore不生效了。
不生效的原因
在上边的情境中,当我们想起来添加规则的时候,已经是完成了一轮或者好几轮的git之后了,这个时候,文件已经进入到了git的追踪中,而gitignore的规则只对未进入追踪的文件起作用。
解决方法
好的,现在理解了为什么中途添加规则会失败,那么也就有针对性的解决办法:在git中有这样一条指令,该条指令会取消本地内容中文件的追踪效果。
git rm --cache <filename> |
这个时候我们便完成了对所有追踪效果的取消
那么是不是这个时候在gitignore中添加的效果就可以起作用了呢?
别急,你先别急,这里还有一个坑:gitignore只对为追踪的文件起作用,但是gitignore自己要是追踪文件。因为上述步骤中我们采用的是用通配符的形式完成了对所有文件的取消,所以gitignore被排除在了追踪文件之外,我们得先使用我们最常用的add命令将gitignore加入到追踪当中
然后再使用通配符完成对剩余内容的追踪。
此时gitignore才会完全生效
git add <filePath> |
如果你使用的是idea这类可视化的工具的话,可以明显的看到gitignore生效之后,排除的文件会变灰,而如果使用的不是idea这类可视化的工具的话则可以使用下面的命令来查看文件是否被正常排除,或者是告诉你未被排除的原因是什么
git check-ignore -v <file> |
总结
按照以下步骤才能正确完成修改gitignore并且使其正常生效
git rm -r --cache . //删除所有文件的追踪效果 |
平常项目中的小技巧
更快的clone
各位在平常使用项目的时候是否只是简单的git clone <项目地址>,当然这是没有问题的,但是既然我们是微进阶技巧,那么也就该教点不一样的。
git clone --depth 1 <地址> |
这条命令的意思是在我们clone的时候指定深度为1,这个深度是干什么的呢?其实就是commit记录
可以在下图中看到我们的commit记录是一共有200多条
但是如果我们使用上边的clone方式 在本地查看log的时候,就会发现,只能查看到最新的commit记录了
团队合作的方式
因为在学习中很难有团队合作的缘故,所以大家在管理自己的github项目的时候估计都是git commit +git pull 一把梭哈,甚至说新开一个分支去升级自己的代码都属于是一个很少用技巧了,而遇到多人开发的情况后便乱成了一锅粥,下面便向大家介绍一套稍微规范一点的流程
1.首先先将代码clone到本地(可以使用上述教过的更快的clone小技巧) 当你要修改的代码的时候 先创建一个新的本地分支,然后将本地分支推送到远程仓库的同名分支
2.当修改完准备上传代码的时候,第一件事是更新一遍本地main分支 因为当你修改的时候,可能远端的main分支已经更新过一遍了,我们需要跟进新版本以防自己新加的代码和新版本会出现冲突。然后在自己修改的分支中使用git rebase main来合并main的修改,这个命令的意思是先将main的更新合并进来,然后尝试提交自己修改的分支,当出现冲突的时候记得修改。然后本地的修改分支推送到远端(注意,因为使用的是rebase,所以会造成本地和远端分支父节点不同的问题,我们需要使用-f来强制推送)。
3.此时远端的修改分支会比main分支多出几个commit,点击右上角Contribute便会出现pull request的内容,点击填好内容后就可以向主分支发送一个请求了
4.如果你是主分支的主人,那么便可以查看pull request,当检查完毕后便可以合并该请求,一般选择使用squash and merge,因为提交上来的修改可能会包含许多的commit,而该合并方式可以把所有的commmit合并为一次,是得main的commit更加简洁清晰
开源项目的共享方式
在开源项目中,可能不会开放给你创建远程分支的权限,这时我们通常选择fork项目到自己的仓库,然后在自己仓库重复上面合作中的操作,只是在第三步的时候选择开源项目的源地址就是了。