一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
前言
Git已经是团队在协作开发中不可获取的一个提交代码、管理代码仓库的工具,虽然市场上已经有了非常多成熟的图形化操作工具,比如smartGit,但是掌握Git的基本命令不仅会让我们加深对Git的理解,并且这些命令可以说是恒定不变的、统一的和通用的,无论去到哪家公司都能使用。而图形化操作工具各有各的特点,换一个操作工具就要重新开始花费一定的时间与精力建立操作习惯,同时过多和过杂的功能会给我们带来不必要的负担。
1.将线上分支拉取到本地
- 方式一:git checkout -b 本地分支名 origin/线上分支名(基于该线上分支创建本地分支,并进行本地分支切换)
- 方式二:git fetch origin 线上分支名:本地分支名(事后需要手动切换分支git checkout 本地分支名)
2.本地创建分支和切换分支
- 创建:git branch 本地分支名
- 切换:git checkout 本地分支名
- 创建并同时切换分支:git checkout -b 本地分支名
注意:尽量不要基于本地的某个分支来创建新的分支,因为此时此刻本地该分支对应的线上分支可能有了较大的变动,那么这个时候基于本地该分支创建的新分支也会存在问题。
因此,较好的做法是基于线上的分支来创建本地新的分支,创建命令:git checkout -b 本地分支名 origin/线上分支名
,举个栗子:git checkout -b feat-newFunction-zhangsan origin/master
3.提交本地分支到线上
- git add .
- git commit -m "变更信息"
- git push origin 本地分支名
4.拉取线上分支最新代码到本地
- git pull origin 线上分支名
5.本地分支改名
- 改名:git branch -m 新分支名
- 推送到线上:git push origin head
6.查看和删除本地分支
- 查看:git branch
- 删除:git branch -D 本地分支名
7.查看和删除线上分支
- 查看:git branch -a
- 删除:git push origin --delete 线上分支名
8.回滚本地分支
- 查看commit值:git log
- 回滚到某次提交:git reset --hard commit值
9.撤销本地分支变更提交
有时候我们会习惯性执行git add . 和git commit -m ""。当我们需要回到git add .前一步的时候那么执行该命令
- git reset --soft HEAD^
10.本地分支合并线上分支
场景:在测试通过,准备上线的时候,我们往往要在本地的自己分支上合并线上的master分支,以此来查看是否存在代码冲突和解决代码冲突,并且执行这一步能够在线上执行merge request时准确看到自己分支的变更,及时发现自己分支的脏代码。以下是相关命令:
- git fetch
- git merge origin/线上分支
11.恢复另一个分支的代码
场景:在线上发起一个对master分支合并的请求,发现存在一些不是自己变更的文件内容,并且在本地执行了merge也无济于事,那么可能自己的分支在本地合并了其他分支,导致污染了自己的分支。解决办法:将自己分支中某文件内容恢复为master分支的内容,命令如下
- git checkout origin/master -- 文件路径 (注:文件路径可以在线上的merge request中复制)
12.跳过代码检查提交
- git commit -m "说明信息" --no-verify
- 注:一般情况下不提倡这么操作,代码检查的目的就是为了帮助我们统一代码格式规范,检查代码是否存在错误或者不合理之处
13.忘记切换分支,但是已经修改了代码怎么办?
- git stash
- git checkout -b 本地分支名(注:创建并切换分支)
- git stash pop
14.假如线上master分支回滚了怎么办?
如果自己的分支是基于上一个版本的本地master分支创建,那么当自己的分支重新发起merge quest到线上master分支时,就会发现自己分支上存在一些不是自己变更的内容,也就是说因为线上master分支了回滚了,导致了自己分支上存在之前本地master分支的代码有一部分变成了脏代码。
因此所有基于上一个版本的本地master分支创建的分支都会受到影响。下面给出解决办法:
- 删除本地master分支
- 重新拉取线上最新的master分支到本地
- 重新基于该master创建自己的分支
- 把之前自己分支上的内容复制到最新分支上