一个由浅入深,学完后能立刻上手的Git教程,对于初学者来说,有一定的参考价值。
¶一、基本概念
¶1. 什么是Git
Git是一个开源的分布式版本控制系统。
Git的分布式:Git采用了分布式版本库的方式,不需要服务器端软件支持即可在本地完成版本控制工作。
Git的版本控制:是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
Git的最基本理解:简单的说Git就是用于保存文件在每次修改时的快照的一个管理系统,这些快照构成了一个个可以来回切换的版本。所以你可以通过使用git来切换快照实现文件恢复,这使得我们管理大型项目代码或者文件时得到了安全的保障机制。当然git的功能不只是快照的来回切换那么简单。它竟然是一种系统,那必然有着很多其它管理性的功能,如分支合并(或者说是快照合并)、各版本文件差异对照、本地仓库和远程仓库的连接和互动、从本地库推送到远程库,从远程库克隆到本地等等。
¶2. git的文件管理机制
git把数据看作是小型文件系统的一组快照。每次提交更新时git都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,git不再重新存该文件,而是只保留一个链接指针指向之前存储的文件。所以git的工作方式可以称之为快照流。
¶3. git的工作流程
- (1)在工作区中添加、修改文件
- (2)将需要进行版本管理的文件存入暂存区
- (3)将暂存区的文件提交到git仓库
¶4. git版本控制区域的情况
(1)工作区:就是你在电脑里能看到的目录。
(2)暂存区:英文叫stage, 或index。一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
(3)版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

¶5. git管理下文件的状态
- (1)已修改(modified)
- (2)已暂存(staged)
- (3)已提交(committed)
¶二. 安装Git
在使用 Git 前需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
Git 各平台安装包下载地址为:http://git-scm.com/downloads
安装的过程就是傻瓜式下一步。然后打开 git bash 输入相关 git 命令即可执行版本控制操作。
💁♂ Git GUI 图形化操作工具
安装 Git 后,主要是可以通过终端命令行方式进行 Git 操作,如果希望使用图形化的 Git 操作方式,可以选择以下工具:
- (1)Git 内置的默认 Git 图形化操作工具:
git gui(windows 对应文件路径<git安装路径>/cmd/git-gui.exe)- (2)第三方 Git 图形化操作工具:
- Sourcetree(不开源但免费,支持 Windows、Mac(不支持 Linux),除了支持 Git 外,还支持 Mercurial 等其他版本控制)
- GitKraKen(不开源且收费,支持 Windows、Mac、Linux)
- GitHub Desktop(开源免费,官方仅支持 Windows、Mac,但社区分支有 Linux 发行版)
- GitAhead(开源免费,支持 Windows、Mac、Linux)
- GitCola(开源免费,支持 Windows、Mac、Linux)
- TortoiseGit(开源免费,仅支持 Windows)
- GitExtensions(开源免费,支持 Windows、Mac、Linux)
对于众多 Git GUI 工具的选择,个人推荐使用 Sourcetree,因为其较为主流,且美观好用。
¶三、初始化git版本仓库
1 | git init #初始化git版本库,会自动创建了唯一master分支,并进入此分支 |
案例:
1 | mkdir project #创建文件目录 |
project是所谓的工作区,工作区有一个隐藏目录.git,这个不算工作区,而是git的版本库。
git的版本库里存了很多文件,其中其中.git/index就是所谓的暂存区,即stage(或者叫index),它是一个二进制文件,还有指向master分支的一个指针文件HEAD等。
¶四、给暂存区添加文件
1 | git add files #将files添加到暂存区 |
案例:
1 | echo "demo" >> demo.txt #创建一个内容为“demo”的测试文件 |
¶五、给git版本库提交文件
1 | git commit -m "提交说明" #一次性将添加到暂存区的所有文件提交到版本库中的master分支,-m后的信息是提交说明 |
案例:
1 | git commit -m "commit demo.txt" #一次性将添加到暂存区的所有文件提交到版本库中的master分支,-m后的信息是提交说明 |
¶六、查看git文件状态
1 | git status #查看项目的当前状态信息。"AM" 状态的意思是,这个文件在我们将它添加到缓存之后又有改动。 |
案例:
以下将从无文件改动或者添加---->创建文件----->添加文件到暂存区----->提交暂存区的所有文件到git版本库这几个不同阶段的文件状态
1 | #无文件改动或者添加的情况查看git状态: |

¶七、查看历史提交记录
git的提交对象:文件对象存放在树对象里,树对象又存放在提交对象里。所以查看提交时的提交id值实际是所有提交文件组合而成的某种形式的哈希值。

1 | git log #输出完整历史提交记录 |
注意:当提交记录后,git是无法再删除提交记录的(即版本仓库快照),除非删除了git仓库(.git目录),如果想要实现类似删除的效果只能通过移动HEDA指针的指向来实现。
案例:
以下就以修改demo.txt为例,进行历史提交记录查看。
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/project (master) |
¶八、版本快照回滚操作

为了效果,在以上已经创建并修改了demo.txt的基础上,下面继续添加readme.txt文件,并对之进行一次修改。
1 | #创建一个readme.txt文件,内容为"hello world !" |
以上操作完成后当前的情况如下图:

¶1. 回滚到上一个版本快照
1 | git reset HEAD~ # 回滚到上个版本并且暂存区会被回滚到的仓库版本文件所覆盖。~表示上一个版本快照,~~表示上上个快照,以此类推,也可以用数字代替,如~10则表示前10个的版本 |
git reset --mixed HEAD~默认选项
移动HEAD的指向,将其指向上一个版本快照
将HEAD移动后指向的快照回滚到暂存区(暂存区会被回滚到的仓库版本文件所覆盖)
git reset --soft HEAD~- 移动HEAD的指向,将其指向上一个快照(不回滚到暂存区)
git reset --hard HEAD~- 移动HEAD的指向,将其指向上一个版本快照
- 将HEAD移动后指向的快照回滚到暂存区
- 将暂存区的文件还原到工作目录(工作目录会被暂存区的文件所覆盖)
案例:
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/project (master) |

¶2. 回滚到特定版本快照
1 | git reset 版本快照的id号 |
案例:
1 | 如本例中要从第四个版本回滚到第三个版本: |
¶3. 回滚快照中的个别文件
1 | git reset 版本快照 文件名/文件路径 #HEAD指针不移动,只回滚个别文件 |
¶4. 往新版本回滚
类似的只要记住版本快照的id号即可往往新版本回滚。
1 | git reset 版本快照的id号 |
但往旧版本回滚后并且关闭了shell,如果在回退以后又想再次回到之前的版本,用git log会查不到版本id号。可以通过以下命令查看所有commit记录。
1 | git reflog #查看历史所以commit id |
¶九、恢复工作区
¶1. 没有add的情况
1 | #检出,只能清空全部已修改的问题件, 但是对于新建的文件和文件夹无法清空, 必须组合下面命令。如果只作用个别文件用参数 -- <file> |
git clean的参数说明:
-f:删除 一些 没有 git add 的 文件-df:删除 一些 没有 git add 的 文件和目录-n:显示将要删除的文件或者目录
¶2. 已经add但没有commit的情况
1 | git reset . #重置,覆盖暂存,但不覆盖本地工作区 |
注: 这种情git reset不允许使用--soft和--hard选项
¶3. 已经add并且commit的情况
1 | git reset --hard HEAD~ #重置,覆盖暂存和本地工作区 |
¶十、checkout和reset的区别
恢复文件
当用
checkout和reset来恢复指定快照中的指定文件时,两种的命令都不会改变HEAD指针的指向。他们的区别是:
checkout命令会同时覆盖暂存区和工作区;而reset命令默认只是将指定快照的指定文件恢复到暂存区(--mixed)。注意:在恢复指定快照中的指定文件时使用
git reset不允许使用--soft和--hard选项
恢复快照
当用
checkout和reset来恢复指定快照时,两种的命令都会改变HEAD指针的指向。他们的区别是:
checkout命令只移动HEAD自身指向其他分支,并不移动HEAD所在的分支指针;而reset命令会移动HEAD自身指向其他分支并且会移动HEAD所在的分支指针指向其他版本库快照。
¶十一、文件diff差异比较
¶1. 比较暂存区与工作区的文件差异
1 | git diff file |
案例:
我们对demo.txt的内容做以下修改。改成以下:
1 |
|
并添加到暂存区。
1 | git add demo.txt |
然后在工作区再对demo.txt做修改。修改为以下:
1 |
|
1 | git diff demo.txt #比较暂存区与工作区的demo.txt差异 |
打印的内容如下:
1 | diff --git a/demo.txt b/demo.txt #a/demo.txt是暂存区的demo.txt,b/demo.txt是工作区的 |
¶2. 比较两个历史快照的差异
1 | git diff 快照id1 快照id2 file |
¶3. 比较工作区和版本快照的差异
1 | git diff 快照id file #工作区和具体的某个快照进行对比 |
¶4. 比较暂存区和版本快照的差异
1 | git diff --cached file #暂存区和HEAD所指向的版本快照进行对比 |
¶十二、提交修改
需求:提交暂存区的所以文件到版本库后(如 git commit -m “commit all files as sunday !”),之后又改动了本地的某个文件,但不想因为此个例再另外提交一次而生成一个版本快照(即生成一个提交log),只想要让这个修改的文件添加到上次的提交中(当前最新的版本快照中)。
可以使用以下命令来实现。
1 | git commit --amend #提交暂存区的内容,但不产生新的版本快照,只是对原本的快照进行修改。 |
案例:
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/project (master) |
¶十三、删除各区的文件
1 | git rm 文件名 #只删除工作区和暂存区的该文件,git rm . 则表示清空工作区和暂存区的文件而不是指定的单个文件 |
案例:
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/project (master) |
¶十四、重命名文件
1 | git mv 旧文件名 新文件名 #重命名工作区的文件,暂存区的文件也被重命名 |
案例:
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/project (master) |
¶十五、分支管理
¶1. 查看分支
1 | #查看本地分支(这个命令会列出当前所有本地分支,其中前面带有 * 号的表示当前所在的分支。) |
¶2. 创建分支
初始化git仓库时,HEAD指针默认指向master分支。如果需要其他分支则需要创建和切换。用下面命令来实现此需求:
1 | #创建分支 |
¶3. 切换分支
1 | #切换分支(将当前分支切换到另一个分支,并更新工作目录中的文件内容) |
需要注意的是,在进行分支切换时,必须保证当前的工作目录和暂存区是干净的(没有未提交的变更),否则切换可能会失败。如果想要保存当前分支的修改,可以先执行
git add和git commit命令将修改提交到当前分支,然后再执行切换分支的操作。当我们创建新的分支并(如:
dev)进行分支切换时,git会新建了一个指针叫dev,其指向master相同的版本仓库快照,当切换到dev分支时,就会把HEAD指向dev,就表示当前分支在dev上。
从现在开始,对工作区的修改和提交就是针对
dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变。假如我们在
dev上的工作完成了,就可以把dev合并到master上。最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
合并完分支后,甚至可以删除
dev分支。删除dev分支就是把dev指针给删掉:
¶4. 合并分支
¶简单使用
1 | #合并某分支到当前分支 |
示例:合并dev分支到master分支。
1 | #先切换到master分支(HEAD指针指向master) |
对于以上案例的合并原理是:HEAD指向的master指针移动到了dev指针所指的节点即完成了合并。
¶合并冲突
多个开发者对同一版本的同一个文件进行修改并提交,当合并两个开发者的提交的分支时会出现合并冲突问题。
下面是合并冲突的一个简单示例:
1 | ####(1)git项目初始化操作 #### |

¶分析
(1)合并不会冲突情形:
在原分支上的某一原节点创建第二个分支,此时原分支和新创建的分支指向这个原节点。从这个原节点往第二个分支的方向开发(修改)得到新的节点(在第二个分支上),再将第二个分支的新节点合并到原节点(在原分支上),这种合并不会发生冲突。
理解:“合并节点的快照”比“被合并节点的快照”的版本新,合并不会冲突。情况如图:
(2)合并会冲突情形:
同一节点分叉开发后合并到其中一个分支上会合并冲突。
在原分支上的某一原节点创建第二个分支,此时原分支和新创建的分支指向这个原节点,在原分支的这个原节点上开始修改得到新的节点。在第二个分支的这个原节点上修改得到另一个新的节点,此时合并一个分支到另一个分支都会冲突。
理解:“合并节点的快照”和“被合并节点的快照”的版本一样新,合并会冲突。
¶5. 删除分支
1 | #删除分支 |
¶十六、git远程管理
¶1. git服务端访问配置
¶1)简要概述
git客户端访问git服务端的仓库,需要通过远程仓库的地址进行访问,远程仓库的地址通常为HTTP协议地址或者SSH协议地址。
(1)HTTP协议地址
地址格式:
http://host:port/xxx.git或https://host:port/xxx.git鉴权与加密方式:通过用户名和密码或访问令牌等进行身份验证,加密通信则通过TLS/SSL来实现。
秘钥存储:首次首次访问远程库时需输入了用户名和密码进行身份验证,之后会保存在系统的凭据存储区域中,各个平台的凭据存储机制如下:
Windows:Windows凭据管理器 (可在 控制面板>用户帐户>凭据管理器>Windows 凭据中查看,或通过cmd命令
cmdkey /list查看)macOS: 钥匙串(Keychain Access)
Linux:GNOME Keyring或KWallet
(2)SSH协议地址:
地址格式:
ssh://git@host:port/xxx.git或git@host:xxx.git(如果SSH协议地址使用默认的22端口则可忽略ssh://和端口进行简写)鉴权与加密方式:使用SSH秘钥对进行身份验证和加密通信。
秘钥存储:客户端SSH秘钥对存储在
~/.ssh目录,目录下有私钥文件(即id_rsa)和公钥文件(即id_rsa.pub,含公钥密文,即所谓的SSH秘钥);服务端SSH秘钥对同样存储在~/.ssh目录下,另外服务端还有个重要的授权文件(即authorized_keys),其存放有客户端的公钥密文,用于客户端访问的身份验证。身份验证过程:当用户尝试与SSH服务器建立连接时,服务器会要求客户端发送其公钥。如果该公钥存在于服务器上的
authorized_keys文件中,则服务器将允许客户端访问并使用该SSH帐户。
¶2)SSH秘钥配置
¶(1)客户端配置
1 | #生成ssh密钥对 |
关于
ssh-keygen命令行工具参数的说明:
-t: 指定要生成的密钥类型。支持的密钥类型有:rsa、dsa、ecdsa、ed25519等-C: 可选,在密钥末尾添加注释信息以标识该密钥的用途(一般为用户的邮箱地址),仅仅为注释,有无都不会影响ssh加解密和身份验证。-b: 指定密钥长度(以比特为单位)。默认情况下,RSA密钥的长度为2048位,DSA密钥的长度为1024位,ECDSA密钥的长度为256位,Ed25519密钥的长度为256位。-f: 指定生成密钥的文件名和路径。如果不指定该参数,则默认生成id_rsa和id_rsa.pub两个密钥文件,并保存在~/.ssh目录下。-N: 指定新密钥的密码短语(也称为口令)。-i: 导入已有的密钥文件。-e: 将OpenSSH格式的密钥转换为其他格式(如PKCS#8格式)。-y: 提取公钥部分,输出到标准输出。-R: 从known_hosts文件中删除指定主机的条目。
¶(2)服务端配置
1 | #添加客户端的ssh公钥密文到服务端授权文件中,用于服务端的身份验证 |
此外还可以在客户端通过命令:
ssh-copy-id -p port user@remote将公钥密文自动上传保存到服务端授权文件authorized_keys中,不过执行该命令需要输入 “user” 用户的ssh密码。
服务端添加
¶(3)ssh访问身份验证测试
可在客户端执行如下命令来测试访问服务端时身份验证是否通过:
1 | ssh -p port -T git@host |
¶3)客户端多SSH秘钥配置
在通过SSH协议访问Git服务端时,Git客户端是借助SSH来实现访问的。在默认情况下SSH会使用~/.ssh/id_rsa为默认私钥文件,并会自动使用该密钥进行身份验证。但如果一个客户端需要访问多个服务端,并且访问不同服务端对应的SSH秘钥也不同,那么客户端就需要生成不同的SSH秘钥对文件(如:id_rsa_gitlib、id_rsa_gogs),操作如下:
1 | #生成新的SSH秘钥对,并指定秘钥对的文件路径 |
对于客户端使用多个不同的SSH秘钥对文件,SSH无法自动识别到这些不同文件路径的私钥文件,故无法自动使用这些非默认的私钥文件进行身份验证,也就是说无论访问哪个服务器都会使用默认的私钥文件id_rsa进行身份验证,故而对于非默认秘钥配置的服务器会验证失败。解决这个问题有以下两种方式:
(1)使用新的ssh代理来添加自定义的私钥
1 | #启动一个新的ssh代理 |
💁♂ 关于SSH代理的说明:
SSH代理(SSH Agent)是一个程序,用于管理和存储SSH密钥,并在需要进行SSH身份验证时提供这些密钥。它允许SSH客户端与SSH密钥分离,并避免在每次连接到SSH服务器时都要输入密码或者手动加载密钥的繁琐性。
当您将SSH私钥添加到代理中后,代理会将私钥存储在内存中,并将其用于后续的SSH连接身份验证。这样,只要代理仍然在运行并且SSH密钥仍然存在于代理中,您就无需再次输入密码或加载密钥即可连接到SSH服务器。
另外,SSH代理还提供了一种安全方式来存储和管理多个SSH密钥。通过使用SSH代理,您可以轻松地切换不同的SSH密钥,并控制哪些密钥可供使用,以确保安全性和保护私人数据。
需要注意的是,在使用SSH代理时,如果您关闭了代理或重新启动计算机,则必须重新添加SSH密钥才能使用。此外,为了确保安全性,建议在使用完SSH密钥后从代理中清除它们,以避免恶意软件攻击或其他安全漏洞。
(2)SSH客户端的配置文件添加SSH登录配置
1 | cat >> ~/.ssh/config << 'EOF' |
配置文件参数
Host: 请求服务端时,服务端ip或域名的匹配模式(可含通配符,如:*.60.156或*.example.com),可根据这个识别模式配置到主机名和私钥文件HostName: 服务端的访问ip或域名(不能含通配符,如:192.168.60.156或git.example.com),默认值为访问时ssh链接地址的ip或域名,如果使用内网穿透等反向代理服务器则可以修改User: ssh用户名 (默认值为ssh链接地址里的用户名)IdentityFile: 私钥文件路径Port: 端口号(默认值为访问时ssh链接地址的端口, 如果使用内网穿透等反向代理服务器则可以修改)对于git可使用如下最简写:
1
2
3
4 cat >> ~/.ssh/config << 'EOF'
Host 192.168.60.156
IdentityFile ~/.ssh/id_rsa_example
EOF
¶2. git提交用户信息配置
设置git提交代码时需要设置的作者名和电子邮件地址
使用Git时,如果未设置用户名和邮箱地址,则每次提交代码时都需要手动输入相关信息,这可能会非常繁琐和易错,所以一般在提交仓库分支时,这些信息都是需要提前配置的。
注意此处的提交代码的用户名并非ssh的用户名,其仅仅是标识提交代码时的作者名称,其可以根据需要进行修改。
1 | #配置全局git用户信息(配置信息存储在 ~/.gitconfig 文件里) |
¶3. 添加本仓库和远程库的关联
将本地库与远程库建立联系,并指定该远程存储库的名称。
1 | git remote add 远程库名称 远程库地址 |
¶4. 解除本仓库和远程库的关联
1 | git remote rm 远程库名称 |
注意,此命令是解除了本地仓库和远程仓库的关联,并不是删除了远程仓库的数据。
¶5. 修改本地库关联的远程库信息
1 | #修改本地库所对应的新远程库地址。 |
¶6. 查看本地库关联的远程库信息
1 | #列出所有远程库名称 |
¶7.设置本地分支的上游分支
即设置本地库的指定分支关联到远程库的指定分支。
1 | #origin/remote_branch是远程分支的名称 |
¶8. 推送本地分支到上游分支
即推送本地库当前分支到远程库的指定分支。
1 | git push 远程库名称 远程库分支 |
1 | #如果已经设置了上游分支,则可以不用加远程库的名称和地址,如下: |
¶9. 克隆远程库为本地库
1 | git clone 远程库地址 [本地库名称] |
通过
git clone克隆远程仓库到本地,那么git将自动初始化本地仓库,并设置本地分支和对应上游分支,上游分支为远程仓库的默认分支(一般是master分支)。
¶10. 拉取远程库到本地库
1 | #拉取远程库到本地库(取回远程库某个分支的更新,再与本地的当前分支进行合并) |
💁♂ 说明:
git pull=git fetch 远程库地址+git merge 远程库名称/远程库分支
git fetch只是下载远程库的分支内容到本地,但没有覆盖掉本地库的分支,需要用git merge来合并远程库的分支到本地库的当前分支。比如git pull命令默认会被解析成如下:
1
2 >git fetch origin master #从origin远程库的master分支下载更新内容到本地
>git merge FETCH_HEAD #将下载好的远程库分支合并到当前分支中💁♂ 注意:
使用命令
git pull拉取分支前,一般是已经通过git clone来克隆获取远程库的代码了。如果先前未使用git clone的话,需要先添加远程仓库,并设置本地分支的上游分支后才能正常使用git pull命令来拉取分支 。操作如下:
1
2
3
4
5 >git remote add origin https://host:port/xxx.git
>git branch --set-upstream-to=origin/master master
>git pull
>#设置本地分支的上游分支和拉取两条命令可合并写为如下(注意在git pull中的--set-upstream不能简写为-u):
>git pull --set-upstream origin master
¶11. 解决推送本地库到远程库冲突的问题
当有两个本地库都连接着同一个远程库,当有一个修改了文件并且推送到了远程库后。另外有个仓库也修改到了同样的文件。如果内容两个推送的修改不一致,那么就造成了冲突。
比如根据之前的例子,本地有pro和project2两个仓库。
(1)修改project2的readme.txt文件的内容为以下:
1 | I am readme.txt |
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/project2 (master) |
(2)在project2修改并提交readme.txt到远程库后,又在本地的pro仓库修改readme.txt,同样提交readme.txt到远程库。
本地的pro修改readme.txt的内容为以下:
1 | I am readme.txt |
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/pro (master) |
git推送失败,原因是推送的内容与本地仓库project2的推送有冲突,project2推送时,已经更新了一个版本。而pro此时比远程仓库旧了一个版本,当推送时就与远程库的版本一样了,但问题是同样推送到同一个远程仓库版本,而远程仓库的这个版本中的readme.txt已经被project2修改了。git远程仓库无法确定要哪个本地库的修改,所以就冲突了。这要求在被其他本地库修改之前就要更新本地库pro到与远程库相同的版本快照,才能进行修改后推送。
通过以下命令来更新本地库pro到与远程库相同的版本快照:
1 | $ git pull origin master |
然后再将本地pro的readme.txt的内容修改为以下:
1 | I am readme.txt |
然后再推送添加提交到本地仓库,再将本地仓库的最新版本推送到远程仓库:
1 | wen@DESKTOP-BHMU9KJ MINGW64 ~/Desktop/pro (master) |
¶十七、团队协同开发
两种方式:
- 项目管理者发送请求邀请其他成员加入到项目里,需要管理者通过用户名或者邮箱邀请其他成员,同时其他成员也要同意接受才能加入到项目中,如此其他成员就能git push。
- 其他成员先fork项目成为自己的仓库,然后git push到自己的仓库后,发送Pull Requests请求给管理者。管理者同意并merge合并其他成员的修改内容到自己的仓库里。
详细步骤待完成… 😂
¶十八、问题解决
¶1. centos7 最小系统精简安装git问题
centos7 最小系统精简安装后,在 git clone 时出现问题提示:fatal: unable to access 'https://xxxxxx.git/': Peer reports incompatible or unsupported protocol version.
解决办法:
1 | yum update -y nss curl libcurl |
1 | vi /etc/profile |
¶2. git bash 中文乱码问题解决
乱码如下:

解决办法:
1 | git config --global core.quotepath false |
core.quotepath是 Git 的一个配置选项,用于指定在命令输出中是否对文件名进行引号转义。
解决后效果如下:

¶十九、Git 常用命令速查表
创建版本库
1 | git clone #克隆远程版本库 |
修改和提交
1 | git status #查看状态 |
查看提交历史
1 | git log #查看提交历史 |
撤销
1 | git reset --hard HEAD #撤销工作目录中所有未提交文件的修改内容 |
分支与标签
1 | git branch #显示所有本地分支 |
合并与衍合
1 | git merge #合并指定分支到当前分支 |
远程操作
1 | git remote -v #查看远程版本库信息 |
更多内容请查看 Git 文档。
