Git高频命令指南

108 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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创建自己的分支
  • 把之前自己分支上的内容复制到最新分支上

参考文章