Git 快速上手

313 阅读7分钟

1. Git 简介

Git 是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。

1.1 两种版本控制系统

1.1.1 集中式版本控制

集中式版本控制有一个集中管理的服务器,然后开发人员通过客户端的形式拉取文件或者提交更新。

集中式版本控制存在一个问题,单点故障:

  • 服务器宕机,会导致开发人员无法及时进行版本控制。
  • 磁盘损坏,丢失所有的数据。

image-20220126124008367

1.1.2 分布式版本控制

分布式版本控制是在每个客户端上保存完整的代码仓库,称为本地库。这样开发人员就可以在自己的电脑上进行版本控制,同时可以通过和服务器进行交互,从而完成团队工作。因为每个客户端保存的都是完成的代码仓库,所以不存在单点故障。

image-20220126124823732

1.2 Git 的工作机制

1.2.1 用户签名区分客户端

Git 安装完成后需要设置用户名和邮箱,自报家门,来表明开发人员所用的客户端。

该信息所有的 Git 本地库共用,只需设置一次。

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

1.2.2 Git 的三个区域

使用Git首先要创建本地库

本地库可以理解为一个目录,里面所有的文件都被Git管理,可以跟踪所有文件的版本。

创建本地库的方法是:

  • 创建一个目录
  • 在该目录中鼠标右键,点击 Git Bash Here,打开Git Bash命令行
  • 通过git init命令把这个目录变成Git可以管理的仓库,会发现该目录中多了一个隐藏文件夹.git

image-20220126131138507

三个区域

  1. 工作区

    工作区就是我们平时写代码的地方,只能看到当前的使用版本。

  2. 暂存区

    工作区修改的代码可以提交到暂存区。

  3. 本地库

    暂存区的代码可以提交到本地库。

使用示例:

  • 修改文件file1.txt,file2.txt,file3.txt

  • 将修改的文件通过git add命令添加到暂存区

  • 将暂存区的文件通过git commit命令添加到本地库

    • -m "add 3 files."是对本次提交的说明

    • 后面不跟文件名表示将所有暂存区的文件提交;跟文件名表示提交指定文件

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

2. Git 常用命令

命令作用
git config --global user.name "Your Name"设置用户名
git config --global user.email "email@example.com"设置邮箱
git init创建本地库
git add file.txt添加到暂存区
git commit -m "message"提交到本地库
git status查看工作状态
git diff查看修改内容
git log查看提交历史
git reflog查看命令历史
git reset hard commit_id版本穿梭
git checkout --file丢弃工作区的修改
git reset HEAD <file>丢弃暂存区的修改
git rm file.txt删除文件

git config --global user.xxx

  • git config --global user.name "Your Name"

    设置用户名

  • git config --global user.email "email@example.com"

    设置邮箱

一个电脑只需设置一次,用于标识各个客户端。

git init

初始化本地库

git add file.txt

将工作区的文件添加到暂存区,可在其后跟多个文件一次性添加

git commit -m "message"

将暂存区的文件添加到本地库

git status

查看工作区以及暂存区的状态

git diff

  • 比较工作区与缓存区

    git diff

  • 比较缓存区与本地库最近一次commit内容

    git diff --cached

  • 比较工作区与本地最近一次commit内容

    git diff HEAD

  • 比较两个commit之间差异

    git diff commit_id1 commit_id2

git log

只能看到当前版本之前的提交历史

git reflog

可以看到所有的命令历史

git reset hard commit_id

可以用版本号,也可以用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100

git reset --hard HEAD^就是回退到上一个版本。

git checkout --file

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout --file

git reset HEAD file

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。

在回退工作区的文件时用git restore <file>git checkout --<file>效果一样

当回退暂存区时(此时文件已经add到暂存区,还未进行commit),使用git restore --staged <file>git reset HEAD <file>效果一样。

git restore 是git 2.23版本新增的命令

git rm file.txt

先手动删除文件,然后使用git rm <file>git add<file>效果是一样的。

3. Git 分支

3.1 分支简介

在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。

image-20220126190750009

同一分支内的版本切换、各分支之间的切换都是通过指针来实现的。

master、dev是两个分支的指针,HEAD是当前版本的指针。

HEAD会指向某一分支的指针。

image-20220126193435898

3.2 常用命令

命令作用
git branch <name>创建分支
git branch v查看分支
git checkout <name>切换分支
git merge <name>把指定的分支合并到当前分支上
git branch -d <name>删除分支

git branch name

  • 创建分支

git branch v

  • 查看分支

git checkout name

  • 切换分支:git checkout <name>或者git switch <name>
  • 创建+切换分支:git checkout -b <name>或者git switch -c <name>

git merge name

  • 合并某分支到当前分支:git merge <name>
  • 可能存在合并冲突

git branch -d name

  • 删除分支:git branch -d <name>

4. 远程仓库

4.1 常用命令

命令作用
git remote v查看当前所有关联的远程地址
git remote add 别名 远程地址关联远程库,并起别名
git push 远程地址别名 本地分支推送本地分支上的内容到远程仓库
git clone 远程地址将远程仓库的内容克隆到本地
git pull 远程地址别名 远程分支将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

4.2 本地库与远程库交互

4.2.1 推送到远程库

本地生成ssh密钥,并把公钥放在Github上;

在Github创建一个远程库;

要关联这个远程库,使用命令git remote add origin git@server-name:path/repo-name.git

关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;

关联后,使用命令git push -u origin master第一次推送master分支的所有内容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改

ssh方式不需要输入用户名密码或者令牌,很方便

4.2.2 克隆远程库

在需要存放克隆下来的项目的文件夹中鼠标右键,点击 Git Bash Here,打开Git Bash命令行

然后 git clone 远程地址: 1、拉取代码。 2、初始化本地仓库。 3、创建别名

4.2.3 拉取远程库最新内容

git pull 远程地址别名 远程分支 :将远程仓库对于分支最新内容拉下来后与当前本地分支直接合并

image-20220126165332816

4.2.4 fork 与 Pull request

image-20220126165437701

5. 其他重要命令

  • git stash
  • git cherry-pick <commit>
  • git fetch
  • git rebase
  • git revert

6. 参考

  1. Git - Book(官方教程)
  2. Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
  3. 尚硅谷Git入门到精通全套教程(涵盖GitHub\Gitee码云\GitLab)bilibili
  4. 我在工作中是如何使用 git 的 - 掘金 (juejin.cn)
  5. 「一劳永逸」一张脑图带你掌握Git命令 - 掘金 (juejin.cn)