—— 分享前端技术,记录生活点滴

Git简易教程

写在前面

  本人从事前端工作近5年,为温故知新,特编写此 Git 教程,同时此教程也在不断添加内容中。教程分四部分:

  • 第一部分是 Git 简介、安装以及用户配置
  • 第二部分是是 Git SSH key 的生成
  • 第三部分是是我这5年来用到的所有 Git 指令,可以说应对日常工作已完全够用
  • 第四部分是是介绍日常开发和协同工作下可能遇到的场景

第一部分 Git初探

Git 简介

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git简易教程

  Git 最初是为帮助管理 Linux 内核开发而开发的一个开源版本控制软件。现在,Git可以在 Linux、Unix、Mac 和 Windows 这几大平台上正常运行。要使用 Git,首先是安装 Git。

Git 安装

  以 Windows 系统为例,可以从 Git 官网直接下载安装程序,然后按默认选项一路 next 安装即可。

  安装完成后,桌面右键,菜单中找到”Git Bash Here”并点击,弹出类似 cmd 的窗口(我们称之为 Git 命令行),表明 Git 安装成功。

用户配置

  安装完成后,还需要最后一步设置,在命令行输入:

1
2
git config --global user.name "填写你的昵称"
git config --global user.email "填写你的邮箱地址"

  因为 Git 是分布式版本控制系统,所以每个操作者都必须有自己的唯一标识:用户名和 Email 地址。

  注意--global全局参数,用此参数表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和 Email 地址。

第二部分 关联远程仓库

  一般仓库平台都会提供基于 SSH 协议的 Git 服务,通过 SSH key,我们可以将本地 Git 项目与仓库平台建立安全连接。

  本部分介绍生成 SSH key 的方法,以 Windows 系统为例。

第1步:检查本机是否已存在 SSH key

  在任意文件夹目录空白处右键,点击 Git Bash Here,运行 Git 命令行,输入以下指令并回车:

1
cd ~/.ssh

  若返回”… No such file or directory”,表明本机当前未设置 SSH key,直接进入第3步。否则——比如你刚入职一家公司,使用别人电脑的时候,难免会有前人的使用记录——进入第2步

第2步:备份并删除已有 SSH key

1
2
3
4
5
// 备份
mkdir key_backup 
cp id_rsa* key_backup 
// 删除
rm id_rsa*

第3步:生成新的 SSH key

1
ssh-keygen -t rsa -C "你的仓库账号对应的邮箱地址"

  输出显示:

Generating public/private rsa key pair. Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):

  直接回车,不要修改默认路径,接下来显示:

Enter passphrase (empty for no passphrase):

  提示你输入一个密码,在每次远程操作之前会要求输入此密码。推荐直接回车,提交项目时不用输入密码,接下来显示:

Enter same passphrase again:

  重复密码或者重复回车。若接下来显示:

Your identification has been saved in /Users/xxx/.ssh/id_rsa. Your public key has been saved in /Users/xxx/.ssh/id_rsa.pub. The key fingerprint is: ... ...

  即为成功。

  此时,在电脑系统盘 - 用户文件夹里,会生成一个 .ssh 文件,其中 id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,是可以公开的。

.ssh 文件

第4步:获取公钥

  打开.ssh 文件夹,找到其中 id_rsa.pub,右键 - 打开方式,选择记事本打开此文件,复制全部内容。

第5步:提交公钥

  仓库以码云为例,打开SSH公钥管理,填写公钥标题,并将复制好的公钥内容粘贴到“公钥”栏,保存即可。注意:复制公钥时不要复制多余空格,否则可能添加不成功。

  添加成功后,就可以使用 SSH 协议对仓库进行操作了。

第三部分 常用指令

工作流程

  了解 Git 指令前,首先了解一下 Git 的工作流程。

workflow

  • Workspace:工作区 - 指的是我们时刻在编辑的文件的目录,通常来说我们修改文件都是在工作区体现的
  • Index:暂存区 - 暂存将本地的修改,然后提交到本地仓库
  • Repository:本地仓库
  • Remote:远程仓库

  上图是简易的 Git 工作流程图,由此不难看出整体的数据流动,就是一条从:工作区 <==> 暂存区 <==> 本地仓库 <==> 远程仓库 的双向数据流通道。

常用指令

创建 Git 仓库

  使当前目录成为一个本地 Git 仓库,便于与远程仓库关联。

1
git init

克隆远程仓库

  克隆仓库会下载远程仓库完整的文件、分支和历史记录到本地。例如,仓库的 SSH 地址为 git@github.com:yangguojin/git-study.git,那么:

1
2
// 克隆完整的仓库到 ./git-study 目录下
git clone git@github.com:yangguojin/git-study.git

拉取远程分支

  同步远程仓库的提交历史到本地仓库。

1
git pull

  通常来说,默认的 git pull 行为等同于 git fetch + git merge

添加变更到暂存区

  将本地所有更改提交到暂存区。

1
git add -A

  git add -Agit add . 以及 git add -u 在功能上看似很相近,但还是存在差别:

  • git add -u 提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)
  • git add . 提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
  • git add -A 提交所有变化,相当于git add -ugit add .的合集

  所以常用 git add -A万事大吉。

提交变更到本地仓库

1
git commit -m "fix:某bug"

  如果不小心把提交的文字信息写错了,并且这次提交还没有push到远程仓库, 那么你可以通过下面的方法来修改提交信息:

1
git commit --amend --only -m 'fix:新的文字信息'

推送代码到远程仓库

1
git push

添加版本tag

1
2
3
4
5
6
7
8
// 本地增加tag(如将当前版本命名为“v1.0”)
git tag v1.0
// 创建一个含备注的tag
git tag -a v1.0 -m '1.0版本'
// 推送到远程仓库
git push origin v1.0
// 批量推送本地tag到远程仓库
git push origin --tags

查看tag

1
2
// 查看本地tag
git tag

删除tag

1
2
3
4
// 本地删除tag
git tag -d v1.0
// 远程删除tag
git push origin :refs/tags/v1.0

查看分支

1
2
3
4
5
6
// 列出本地存在的分支
git branch
// 列出远程分支
git branch -r
// 列出本地和远程分支(使用回车键以查看更多;Q键返回)
git branch -a

新建分支并切换

1
2
// 新建本地分支 new_branch
git checkout -b new_branch(注意分支名对应)

删除分支

1
2
3
4
// 删除本地分支 branch1
git branch -d branch1(注意分支名对应)
// 删除远程分支 branch2
git push origin --delete branch2(注意分支名对应)

切换分支

1
2
3
4
// 切换当前分支到 dev 分支
git checkout dev
// 切换到前一分支
git checkout -

合并分支

  合并远程仓库的 test 分支到当前分支,一定要记得在 git merge 前先执行 git pull 获取最新代码,在 git merge 之后执行 git push 提交合并后的新代码。

1
git merge test

撤销本次合并

1
2
3
4
5
// 如果不小心 merge 错分支,同时你还没有 push 到远程
// 那么首先获取远程最新内容
git fetch --all
// 然后强行 reset 到当前分支对应的远程分支,这一步将撤销没有 push 的 merge
git reset --hard origin/xxx

  但如果本次 merge 已经 push,请接着往下看。

版本回退

1
2
3
4
5
6
7
// 回退至上一个版本
git reset --hard HEAD
// 回退至指定版本(版本号一般取前六位即可)
git reset --hard 版本号
// 回退后无法直接 push,会提示需要先 pull
// 使用以下指令强制将当前回退后的代码同步到远程(注意最后的分支名)
git push -f -u origin 当前分支

更多指令

  • Git 常用指令速查表

Git 常用指令速查表

第四部分 常见场景

  多分支开发便于版本管理,便于协同开发,这需要本地分支与远程分支分别建立 track 关系,如果未 track , push 和 pull 等命令将无法正常实现。本部分针对常见的几种场景依次梳理(一般便于维护,我们将本地分支与远程分支做到同名)。

场景:解决冲突

  • 发生冲突
1
2
3
4
5
<<<<<<< HEAD
123
=======
1234
>>>>>>> test

  Git 使用 <<<<<<<,=======,>>>>>>> 标记文件中自己和别人产生冲突的部分。在 <<<<<<< 和 ======= 之间为自己的代码;在 ======= 和 >>>>>>> 之间为别人的代码。根据实际情况,与小伙伴沟通,逐一修改。

  • 冲突解决后提交
1
2
3
4
5
6
7
8
// 习惯性浏览一下改动过的文件
git status
// 添加到暂存区
git add -A
// 提交到本地仓库
git commit -m "fix:解决冲突"
// 推送到远程仓库
git push

场景:新建项目

  如果为新建项目,需要提交到远程仓库。首先,我们需要在仓库平台新建一个项目,并获取其 SSH 地址,如git@github.com:yangguojin/git-study.git,随后:

1
2
3
4
5
6
7
8
9
10
// 创建新的本地仓库
git init
// 与远程仓库建立 track 关系
git remote add origin git@github.com:yangguojin/git-study.git
// 添加本地所有文件到暂存区
git add -A
// 提交到本地仓库
git commit -m "first commit"
// 推送到远程仓库的 master 分支
git push -u origin master

  此处在推送到远程仓库前需要注意,直接 git push 会报错,需要指定仓库名和分支。

场景:加入已有项目

  假设我们刚进到一个公司,已经有在开发的项目了,需要我们加入。

  1. 远程仓库 git clone 下载到本地
  2. 切换到开发分支,如 test 分支git checkout test
  3. 常规的代码修改操作 git add -Agit commit -m 'xxx'
  4. 每次提交代码前务必 git pull ,拉取同事最新提交,保持本地仓库最新,这样才能尽可能避免冲突。

场景:分支同步

  • 1. 已有本地分支,需要新建对应的远程分支

  现已有本地分支 dev1,但是在远程没有,所以可以利用:

1
git push --set-upstream origin dev1

  这样就可以自动在远程创建一个 dev1 分支,同时本地分支会 track 该分支。

  • 2. 已有远程分支,需要新建对应的本地分支

  现已有远程分支 dev2,本地没有该分支,则可以利用命令:

1
git checkout --track origin/dev2

  这时本地会新建一个分支名叫 dev2,同时自动 track 远程的同名分支 dev2。

  • 3. 已有本地分支和远程分支,让它们建立 track

  现有本地分支 dev_local 和远程分支 dev_remote,可以使用:

1
git branch --set-upstream-to=origin/dev_remote dev_local

  此时两个分支完成 track 追踪。

  以上所有便是我对 Git 技术的一些整理,希望能对你有所帮助。

(END)

支付宝打赏 微信打赏

如果觉得我的文章对您有用,请随意赞赏 :)