Wiki:知识&笔记 Wiki:知识&笔记
首页
  • 学习笔记

    • 《JavaScript教程》笔记
  • 嵌入式

    • STM32
  • 技术文档
归档
GitHub (opens new window)
首页
  • 学习笔记

    • 《JavaScript教程》笔记
  • 嵌入式

    • STM32
  • 技术文档
归档
GitHub (opens new window)
  • 技术文档

    • Git使用手册
      • 安装
      • 创建版本库(仓库)
      • 添加文件到仓库
      • 版本管理
      • 远程仓库
        • SSH验证
        • 关联远程仓库
        • 查看远程仓库
        • 删除远程仓库
        • 从远程库克隆项目
        • 从远程仓库拉取更新
      • 分支管理
        • 创建分支
        • 查看分支
        • 切换分支
        • 合并分支
        • 删除分支
        • 修改分支名
      • 常用工作流程
      • 帮助命令
      • 参考文档
    • Markdown使用教程
    • npm常用命令
    • yaml语言教程
  • 其他
  • 技术文档
2019-12-25
安装
创建版本库(仓库)
添加文件到仓库
版本管理
远程仓库
SSH验证
关联远程仓库
查看远程仓库
删除远程仓库
从远程库克隆项目
从远程仓库拉取更新
分支管理
创建分支
查看分支
切换分支
合并分支
删除分支
修改分支名
常用工作流程
帮助命令
参考文档

Git使用手册

# Git使用手册

# 安装

官网下载:https://git-scm.com/downloads (opens new window) 下载完成后使用默认进行安装。

安装完成后,在开始菜单里找到 Git -> Git Bash,蹦出一个类似命令行窗口的东西,就说明Git安装成功! 还需要最后一步设置,在命令行输入:

git config --global user.name "Your Name"
git config --global user.email "[email protected]"
1
2

因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

# 创建版本库(仓库)

# 创建仓库
mkdir <仓库name> 

# 进入仓库
cd <仓库name>

# 此命令用于显示当前目录
pwd

# 把当前目录初始化成Git仓库
git init
1
2
3
4
5
6
7
8
9
10
11

也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录直接git init也是可以的。

# 添加文件到仓库

在仓库目录下放入文件,如新建一个test.txt文件,然后使用git add test.txt命令告诉Git,把文件添加到缓存区,然后使用git commit -m "提交描述"告诉Git,把文件提交到仓库。

# 添加指定文件或文件夹到缓存区,文件需添加后缀
git add <文件或文件夹name>                   # 单个文件
git add <文件或文件夹name> <文件或文件夹name>  # 多个文件

# 或 全部文件同时添加到缓存区
git add .

# 把文件从缓存区提交至仓库
git commit -m "提交描述"
1
2
3
4
5
6
7
8
9

# 提交描述规范

在提交代码时输入清晰的说明有利于版本管理,建议搭配如下关键字编写提交描述

# 新建(add)
# 删除(rm)
# 更新(update)
# 改动(change)
# 实现
# 发布
# 修复
...
1
2
3
4
5
6
7
8

# 版本管理

# 提交修改

如修改test.txt的内容后,运行git status命令看看被修改的文件,然后再使用git add test.txt、 git commit -m "修改描述"把修改后的文件提交到仓库,提交后可再次使用git status查看当前状态。

# 显示 新增/删除/被改动等 的文件
git status
1
2

# 查看版本记录

# 查看版本记录
git log   # 显示版本号、提交时间等信息
1
2

也可使用可视化工具查看Git版本历史: 在仓库目录右键 > Git BUI Here

# 回退版本

首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。

# 回退到上一个版本
$ git reset --hard HEAD^
1
2

此时查看git log记录发现,原来最新的版本已经没有了,想回到原来最新的版本怎么办?这就需要知道最新的版本的版本号

# 跳转到指定版本
git reset --hard <版本号前几位>
1
2

但是不知道版本号怎么办?Git提供了一个命令git reflog用来记录你的每一次命令

git reflog
1

# 撤销修改

https://www.liaoxuefeng.com/wiki/896043488029600/897889638509536 (opens new window)

# 删除文件

https://www.liaoxuefeng.com/wiki/896043488029600/900002180232448

# 远程仓库

# SSH验证

使本机能关联远程仓库,首次需要SSH验证

  • 第1步:创建SSH Key。在用户主(C:\Users\dell)目录下,看看有没有.ssh目录, 如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。 如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:
# 创建SSH Key
ssh-keygen -t rsa -C "邮件地址"
1
2
  • 第2步:登陆GitHub,右上角头像 > settings > SSH and GPG keys >Add SSH Key,在key的文本框里粘贴id_rsa.pub文件的内容

# 关联远程仓库

SSH验证完成后,在github创建仓库,创建仓库时记得取消 Initialize this repository with a README的勾选,然后在本地命令:

# 关联远程仓库,仓库名一般使用origin
git remote add <仓库名> <远程仓库地址>

# 示例
git remote add origin [email protected]:xugaoyi/test.git
1
2
3
4
5

下一步,就可以把本地库的所有内容推送到远程库上

# 把文件推送到远程仓库
git push -u <仓库名> <分支名>

# 示例
git push -u origin master
1
2
3
4
5

由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

前提是目录已经git init初始化成仓库,并且git status状态是没有改动的,如果有改动则先git add .添加至缓存区,git commit -m '提交描述'提交至仓库,然后执行上面命令。

如创建仓库时勾选了 Initialize this repository with a README 则需先拉取README.md文件到本地仓库git pull

可关联多个远程仓库,注意给不同的远程仓库取不一样的名称,提交是分别按名称提交到不一样的远程仓库。

# 简化的推送命令
git push
1
2

# 查看远程仓库

# 查看远程仓库
git remote -v
1
2

# 删除远程仓库

# 删除远程仓库
git remote rm <仓库名>
1
2

# 从远程库克隆项目

# 从远程库克隆项目
git clone <仓库地址>
1
2

# 克隆指定分支

# 克隆指定分支
git clone -b <分支名> <仓库地址>
1
2

# 从远程仓库拉取更新

# git fetch

#从远程仓库特定分支拉取更新
git fetch <远程主机名> <分支名>
1
2

git fetch 在拉取更新后并不会将本地仓库与最新版本进行合并,而是需要你在本地主机上要用 远程主机名 / 分支名 的形式读取。比如 origin 主机的  master,就要用 origin/master 读取

取回远程主机的更新以后,可以在它的基础上,使用 git checkout 命令创建一个新的分支:

#以取回的 origin/master 为基础,创建新分支 newBranch
git checkout -b newBrach origin/master
1
2

上面命令表示,在 origin/master 的基础上,创建一个新分支

此外,也可以使用 git merge 命令或者 git rebase 命令,在本地分支上合并远程分支

$ git merge origin/master
# 或者
$ git rebase origin/master
1
2
3

上面命令表示在当前分支上,合并 origin/master

# git pull

git pull 相当于两个命令 git fetch origin <branch> 与 git merge origin/<branch>,也就是取回之后再合并。关于合并命令请往下翻以查看详情

默认地,git pull 的合并方式是 git merge 而使用如下命令:

#拉取更新后以 rebase 方式合并
git pull --rebase
1
2

这样可以在拉取更新后以 git rebase 的方式合并

# 分支管理

# 创建分支

# 创建分支
git checkout -b <分支名>
1
2

# 查看分支

# 查看分支
git branch
1
2

查看分支时,在分支前带 * 号的表示当前的分支

# 切换分支

# 切换分支
git checkout <分支名>
1
2

# 合并分支

# Git merge

# 合并本地的分支
git merge <分支名>

# 合并远程的分支
git merge <远程仓库名>/<分支名>
1
2
3
4
5

注意,是将指定分支合并到当前分支,并非当前分支合并到指定分支。

一般情况下是把当前分支切换到主分支,然后把子分支合并到主分支。

# Git rebase

与 git merge 不同的的是二者合并的方式有所不同:

  • git merge:
    • 是先找到两个分支的最近的共同祖先,随后将两个分支的分别的最后一次提交与这个共同祖先这次提交,共计三个提交合并
    • 两个分支合并后,在生成一次提交,两个分支的 HEAD 均指向此处
  • git rebase:
    • 则也是先找到两个分支的最近的共同祖先,随后找到另一个分支(也就是我们变基的目标分支)相对于这个共同祖先的修改,暂时保存这些修改,然后将我们操作的分支的 HEAD 暂时指向另一个分支的最新提交,然后将刚刚保存的修改应用到我们的分支上,然后操作分支的 HEAD 跟着指向修改作用后的状态,也就是 git rebase 并不会再生成一次提交,而是直接将我们操作分支的基底安在了目标分支的最新提交上
    • 随后我们操作的分支 HEAD 指向合并后的,而另一个分支的 HEAD 仍然保持不变,想要更新的话直接快速 git merge 即可
  • 官方文档 (opens new window) 讲的比我好,看看这个!更加清晰

相对于 git merge, git rebase 能够简化 git 的 workflow,不会出现很多分支交错纵横的感觉,当然,git rebase 的用法远远不止于此,等待后续添加

#将 develop 分支基底变至 master 的最新提交
git rebase master
1
2

# 删除分支

# 删除分支
git branch -d <分支名>
1
2

# 修改分支名

# 修改分支名
git branch -m <原分支名> <新分支名>
1
2

# 常用工作流程

在与团队进行协作开发的时候,常常会遇到这样的问题:

举个例子:团队的开发都基于 develop 分支。我们开发时,总是先把 develop 分支先 pull 到本地,随后进行具体的新功能的开发。

可是当我们的开发还没有完成,云端的 develop 分支已经被某位同事开发的新功能更新了。这些新功能与我们的开发没有冲突还好,如果有了冲突就不是很好办

这个问题怎样解决

我认为尽量简化工作流程即可,不必将一些事情搞得太过麻烦:

  • 首先就是拉取保证我们本地的 develop 分支始终处于最新版本,也就是是不是 pull 两下子这个分支,最好使用 git pull --rebase 进行拉取更新

    有一个情况,就是拉取更新的时候有可能会有冲突,但是这个可能性不大,除非那个人就是解决冲突才提交上去的。但是这也是无奈之举,解决冲突即可

  • 然后就是开发完成后,首先与我们本地最新的 develop 分支进行合并,最好使用 git rebase 不然你本地的 workflow 会很难看,冲突一般是有的,但是解决即可

  • 随后就是提交分支到远程仓库,然后 pull request 请求并入远程 develop 分支,这样在合并的时候能省下不少力气

# 帮助命令

如对命令不清楚时,可使用git help命令显示出git命令介绍。

# 帮助命令
git help
1
2
$ git help
usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout   Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Reapply commits on top of another base tip
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

翻译工具翻译中文

$ git help
使用:git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

这些是在各种情况下使用的通用Git命令:

start a working area (参见命令: git help tutorial)
   clone      将存储库克隆到新目录中
   init       创建一个空的Git存储库或重新初始化一个现有的存储库

work on the current change (参见命令: git help everyday)
   add        将文件内容添加到索引中
   mv         移动或重命名文件、目录或符号链接
   reset      将当前磁头重置为指定状态
   rm         从工作树和索引中删除文件

examine the history and state (参见命令: git help revisions)
   bisect     使用二分查找查找引入错误的提交
   grep       打印与模式匹配的行
   log        显示提交日志
   show       显示各种类型的对象
   status     显示工作树状态

grow, mark and tweak your common history
   branch     列出、创建或删除分支
   checkout   切换分支或还原工作树文件
   commit     记录对存储库的更改
   diff       显示提交、提交和工作树等之间的更改
   merge      将两个或多个开发历史连接在一起
   rebase     在另一个基本提示之上重新应用提交
   tag        创建、列表、删除或验证用GPG签名的标记对象

collaborate (参见命令: git help workflows)
   fetch      从另一个存储库下载对象和引用
   pull       从另一个存储库或本地分支获取并与之集成
   push       更新远程引用和相关对象

'git help -a' 和 'git help -g' 列出可用的子命令和一些概念指导。
命令'git help <command>' 或 'git help <concept>' 查看特定子命令或概念.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

# 参考文档

https://www.liaoxuefeng.com/wiki/896043488029600 (opens new window)

编辑 (opens new window)
上次更新: 2021/01/07, 16:01:00
Markdown使用教程

Markdown使用教程→

Theme by Vdoing | Copyright © 2020-2025 Jack :) | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式