使用Git版本管理的项目在提交代码的时候自然免不了遇到一些问题,遇到问题的解决方式有两种:
- 1.尽量避开,选择绕过,采用其他方式
- 2.迎面而上,积极解决
不同的态度导致解决问题方式的不同,结果是一样的,但是第二种方式相对而言总会学到一些什么,进步更快,但解决问题花费的时间却更长一些。程序员来讲,尤其是初级,最好还是要克服一下畏难心理,因为你遇到的问题越多,说明你成长的机会越多。
今天就记录下我在代码提交过程中遇到的一些问题,一是好记性不如烂笔头,记下来以供日后遇到相似问题时能提供个解决思路,二来也是想跟大家交流分享一下,如果有其他比较经常遇到的Git问题,也可以评论区讨论。
1. 切换分支报错: refname 'xxx' is ambigous
出现这类错误的原因有很多,比如标签和分支名相同或者分支名称与某次提交中的SHA1前缀相同,用git show-ref <branch_name>命令查看带有<branch_name>的分支引用:
git tag new_tag old_tag
git tag -d old_tag
git push origin new_tag :<old_tag_path/old_tag>
为了保证其他同事也移除了这个tag,需要通知他们运行剪枝命令:
git pull --prune --tags
也可以通过在前面加上前缀来解决问题,比如要切到分支上:
git checkout heads/[ref-name]
而如果是分支名和某次提交的commit_id的前缀相同,那么应该尽量避免这种情况,分支前面加个功能前缀更好,比如hotfix/<branch_name>
2.git reset还是git revert
两种都是回退commit的方式,用哪种更好呢?其实搞明白它俩的作用,再结合自己的需求,就不会有这个困扰了:
git revert是有记录的回退,执行之后会多出一条commit记录,告知其他人这里有回退操作git reset是无记录的操作,会直接将之前的commit删掉,如果没有--hard标记,就不会删掉修改代码,另外如果之前代码已经推送到远端分支,reset之后需要强推git push -f
3.剪枝
在开发功能的时候由于团队协作或临时修复bug,可能会在远端建立多个分支,比如feat/1.1、hotfix/1.0等,完成开发之后通过操作将远程仓库中的分支删除了,但本地仍存在多余的远端分支(remotes/origin开头),如果不删除,代码仍然可能提交到这样一个实际上不存在了的远端分支上,怎么办呢?git fetch --prune可以解决这个问题。运行一下这个命令,不存在的远端分支快照就会被清理掉。
如果需要在每一次git fetch和git pull命令之后都进行剪枝,那么可以将剪枝标记--prune设置为全局有效:
git config --global fetch.prune true
4.git clone小技巧
在克隆项目时,如果我们只关心某个分支,则只需要克隆这个分支即可,比如master分支。
git clone -b master --single-branch [仓库地址]
好处有二:一是减少克隆时间,而是本地分支清楚明确,没有大量多余的origin/xxx分支
暂时就这么多,后续再更新吧~
最后
最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。




有需要的小伙伴,可以点击下方卡片领取,无偿分享
文章介绍了在使用Git进行版本管理时遇到的问题,如切换分支报错、gitreset与gitrevert的区别、剪枝操作以及gitclone的技巧,并提供了相应的解决方案,强调了面对问题时积极解决的态度对程序员成长的重要性。同时提到了JavaScript与ES的学习笔记作为额外资源。
951

被折叠的 条评论
为什么被折叠?



