目录
- 前言
- 当你刚到一个公司
- 写代码,交自己的分支
- 提交并推送了代码,但是有所更改
- 第二天拉取代码
- 切换分支
- 远程分支太多&&本地仓库太多
- checkout检出失败的情况
- 未完待续
前言
此篇用于记录笔者在工作中用到git遇到的问题及大部分的操作。
区别于理论,这篇更具针对性,掌握这些,基本的面试及工作足以应对。
之前还写过一篇理论篇,是最基础的一些知识,供参考:
git保姆级教程(概述、理论、指令、创建及代码初始化完整步骤、分支与冲突、遇到的问题)
当你刚到一个公司
刚到一个公司,我们需要拉取代码,这个时候,需要用到克隆。
git clone xxx
在远程仓库复制url,就可以克隆项目。但只是原封不动的把代码拿了下来。一般拿到的都是该项目的主分支master。
想要看到当前分支,我们可以用到:
git branch
看到自己所在分支,加入我们要拉取最新分支,有多种途径。一般情况下,我们需要先建立一个本地分支,再拉取远程分支。
有一步到位的做法:
git checkout -b dev origin/devYuan
origin左侧是我们建立的一个本地分支,origin右边则是我们需要拉取的远程分支。
到这一步,我们的代码拉取下来,并且也与新的分支建立了联系。
写代码,交自己的分支
我们拉下代码后,在本地分支自己的代码上做了修改。怎么提交?
首先,我们需要让本地暂存我们的修改:
git add .
如果要提交,则:
git commit -m '注释'
在commit中,一般情况下一定要写注释。可以把自己当天做的什么东西,用简短的文字一起提交。这个就是提交到了本地仓库。
如何推送到远程?如果你还没有推送过你的分支,你需要在远程建立一个新的分支,并且push代码:
git push --set-upstream origin xxx
这一步做完,你就可以在远程仓库上看到你的最新分支了。注意,这个xxx是我们本地当前的分支。这个也可以通过刚刚讲过的git branch来查看。
提交并推送了代码,但是有所更改
刚刚我们已经在远程创建了一个分支,但是我们发现有一个地方有点问题,于是修改了代码。修改代码之后,我们再提交到远程分支,就不必像刚刚那样大费周折,直接:
git push
就可以更新我们的远程分支。
第二天拉取代码
我们和同事用的是一个仓库,但是不同分支,大家有不同的版本,于是第二天,我们需要拉取同事的代码。
但是拉取代码,并不是说,自己写的那一部分就不要了。
一般情况下,我们可以先,建立一个本地分支:
git checkout -b xxx
创建了一个本地分支,然后拉取同事的代码:
git pull origin xxx(同事的分支名)
拉下来之后,git可能会报错,是因为有冲突。冲突,是因为我跟同事改的代码,改了一个地方,但是有两种写法,那么应该听谁的呢?这个时候就需要和同事商量,一般情况下,编译器中的工作树种都可以看到,比如我们的vscode。可以在上面进行选择。
但是如果不想合并代码,想直接拉取该怎么办?这个时候我们就可以先提交到本地一版,先add,再commit。或者我们可以用到:
git stash
把现在的代码放到暂存区,这个时候我们就可以正常拉取同事的代码,并且自己写的代码也没有丢失了。
切换分支
假如我们本地有多个分支,但是要查看不同分支,就需要从这个分支切换到另一个分支,我用的最多的是:
git checkout xxx
敲黑板,如果切换分支都报错,那么也需要走一遍add,commit流程,或者stash。大多都能解决问题。
远程分支太多&&本地仓库太多
如果是涉及到分支开发,那么可能一段时间内分支会有很多,这样的话其实会对效率有一些影响。所以每过一段时间,我们都需要清理本地分支,或者本地仓库。
很简单,远程分支清理:
git push origin --delete xxx
本地分支清理:
git branch -d xxx
本地删除如果报错:
git branch -D xxx
可以解决大部分问题。
checkout检出失败的情况
如果分支存在,但是检出失败,可能是因为,本地并没有及时更新分支。
我们先来聊一下,如何更新本地查看远程分支时,远程分支是完整的,首先,本地查看远程分支:
git branch -r
如果分支不全,那么检出是失败的,我们在本地更新一下:
git fetch
之后就可以用上述聊到的git checkout…来正常检出了。
未完待续
以上是我在上班的时候,遇到问题,解决问题的一些方法,都总结在这里。刚来上班的我只懂理论,在git这条路上,探索了很多,也失败,着急了很多次,最后通过资料的搜索与学习,一点点学习到,尝试用,并熟练。
我知道后面我还会遇到很多问题,都会在这篇博客中记载。也欢迎大家关注,欢迎指正,有什么问题欢迎评论区一起交流!学习是永无止境的,祝大家渐入佳境!!