大家好!!!相信正在看这篇文章的你应该也正在烦恼如何使用git吧,从我今年7月份开始实习以来,我就已经在使用git上踩了无数的坑,如:
- 师兄:你去把xx项目拉下来
- 我:好......师兄怎么拉的代码没有你截图的部分
- 师兄:你得切换分支啊...
又比如:
- 师兄: 你推的代码怎么一堆爆红啊
- 我:我看推不上,我就
git push --force
了 - 师兄: 哇靠,你冲突都没解决就强推代码了?
- 相信各位肯定没犯过我这样离谱的错误,但是也或多或少踩过一些奇奇怪怪的坑,那么接下来我就给大家介绍一下常用的一些git命令及其使用场景
一、 基础操作
初始化仓库
-
git init
-
场景:初始化一个新的 Git 仓库。
-
示例:
csharpgit init
-
作用:将当前目录变成一个 Git 仓库。
-
克隆仓库
-
git clone [repository_url]
-
场景:从远程仓库复制项目到本地。
-
示例:
bashgit clone https://github.com/user/repo.git
-
作用:复制远程仓库的代码到本地,同时配置远程关联。上边的方法一般克隆的是我们的主分支(master)的代码,如果想克隆特定分支的代码可以执行以下命令
cssgit clone -b [branch_name] [repository_url]
-
二、 更新与提交
更新最新状态
git fetch
-
场景:用来获取某个分支的最新代码,但执行这个命令并不会使我们的工作区代码发生改变,因为它只是去获取代码的一个最新状态
-
作用:当我们想去查看某个分支有没有推取最新的代码,但又不想拉去他的代码时,便可以使用这个命令
git fetch origin xxx(分支名)
,如果有下git graph或其他git插件,就可以通过git graph直观的看的某个分支的最新提交,当然git graph一般会自动获取最新的提交,只有少数情况下没获取到。
-
合并分支
git merge [branch_name]
-
场景:将指定分支的代码合并到当前分支。如git merge xxx(分支名)
-
示例:
sqlgit merge master
-
作用:该命令常用于将我们自己分支的代码合并到主分支,但是这个操作一般会在git集成的平台里通过手动点击执行,不需要输代码。另一个场景就是用于去将某个分支的最新代码合并到本地分支,提前去解决后面合并代码可能出现的冲突,但是这种方法会产生一个commit,在后期去观察我们的git graph时可能会让git图混乱,如:
-
-
上图中的每一条线代表一个分支,每一个圆点都代表一次因merge而产生的commit,在我们后面出现问题去回查代码的提交历史的时候可能会很难受,但是这种方式的优点就是不容易出现一些提交权限方面的问题,后面会介绍另一种方式去拉取最新的代码
-
拉取远程最新代码
git pull
- 场景:从远程仓库拉取最新的更改并合并到当前分支
- 示例: git pull origin [branch_name]
- 作用:相信该命令也是大家最常用的命令之一,每当我们需要拉取自己分支或别人分支的最新代码时,我们会使用该命令。而该命令其实也就是组合了git fetch 和 git merge,等于是我们在执行git pull的过程中会先去使用git fetch获取目的分支的最新代码状态,然后执行git merge将目的分支的最新代码合并到我们的本地分支。
变基操作
git rebase
-
场景:将当前分支的提交"移植"到目标分支的最新提交之上,创建一个线性的提交历史。 这使得项目历史更加清晰,便于理解和维护。
-
示例: git rebase [branch_name]
-
作用:可能上面的方式描述的不是那么通俗易懂,打个比方,有分支
master
,我在master
上拉了两个分支feature1
和feature2
分别开发不同的功能,feature1
有三个commit分别是a,b,c
,feature2
有两个commit是d,e
,现在我在feature1
执行git rebase feature2
,那会发生什么呢,此时feature1
的历史提交变为了d->e->a->b->c
,为什么会这样,因为变基操作及改变基底,也就是改变我们的提交历史,原本的分支起点是从master开始,执行rebase后变为了由feature2的最新提交开始。这样做的好处就是我们的提交历史是一条直线,不会有突然插入我们分支的commit,但是也会让我们的分支历史不在单纯,因为其中的一些commit可能不是我们自己的提交,而是变基而来,要是觉得文字不够形象可以观看下图 -
-
我们可以使用
git pull -r
让我们的拉取变为变基拉取代码
-
暂存代码
git stash
-
场景:将当前工作目录的更改暂存起来,恢复到上次提交的状态。适用于需要切换分支处理紧急任务时。
-
作用:该命令常用于这样的场景,当你正在分支一写需求时,领导忽然给你一个新需求,那你只好在master上新拉一个分支去做这个需求,但分支一的需求还没写完,那咋办?又不能直接提交,不提交代码又无法切换分支,面对这样的场景,那就可以拿出我们的
git stash
了,我们先使用git stash暂存当前工作区的代码,在切换到我们的目标分支,将那边的需求做完以后,我们又可以切回原来的feature1分支,使用git stash pop
让我们上一个暂存的提交出栈到我们的工作区,又能接着开发了,完美解决 -
当然,我们也可以用git stash list去查看当前的暂存区有哪些暂存的commit
-
示例:
git stash
-
提交代码
git commit
-
场景:将当前暂存区的代码提交,暂存区的代码哪来的呢,当然是
git add
添加的嘛,当然我们也可以采用git commit -am "提交信息"
,将git add和commit操作合并 -
作用:这个命令很简单,就不详细介绍了,主要介绍一下可能出现的问题,有时候我们的项目可能配置了eslint代码提交检查,当出现一些没来由的错误(既没提示错误信息,也没提示错误位置),但是又commit不上,咋办,临时手段就是采用下边的命令
git commit -am "提交信息" --no-verify
,该命令可以让我们忽视eslint的检查 -
示例:
sqlgit commit -m "feat: xxx"
-
推送代码
git push
-
场景:将本地分支的更改推送到远程仓库。适用于将本地开发的更改共享到远程仓库。
-
作用:这个命令也不过多介绍,就如字面意思而言,将本地提交推送到远程,使其同步。这里主要在介绍下使用该命令容易出现的问题,我们有时会遇到git push无法推送的情况,大部分是因为远程分支存在多人协作的情况,导致提交不同步,此时我们可以使用
git push --force
强制推送 -
示例:
cssgit push origin [分支名]
-
切换分支
git checkout [branch_name]
- 场景:切换到指定的分支。适用于在不同的开发任务之间切换。
git switch [branch_name]
- 场景:与上边命令相同,用于切换分支,更加语义化
删除本地分支
git branch -d [branch_name]
- 场景:删除本地分支。适用于清理不再需要的分支。远程分支依旧存在
删除远程分支
git push origin -d [branch_name]
- 场景::删除远程仓库的分支。适用于清理远程仓库中的不再需要的分支。需要注意一下与上方命令的区别
好,那今天的介绍就到这里了,祝大家实习工作顺利,文章反响可以的话我会继续更新~