Git 配置与使用
I. 注册账户以及创建仓库
要想使用 GitHub 第一步当然是注册 GitHub 账号了, GitHub 官网地址:
https://github.com/
。 之后就可以创建仓库了,Create a New Repository
,填好名称后 Create
,之后会出现一些仓库的配置信息,这也是一个 Git 的简单教程。
II. 配置Git
2.1 修改默认 HOME
目录
2.1.1 打开环境变量设置
按下 【Win + R】,输入
sysdm.cpl
,回车。进入“系统属性” -> 高级 -> 环境变量。
2.1.2 添加或修改 HOME
环境变量
在“系统变量” 中,点击“新建”或“编辑”。
变量名:
|
|
- 变量值,填写你想设置的路径,比如:
|
|
2.1.3 验证修改
设置完成后,关闭并重新打开 Git Bash 或其他终端工具。输入以下命令验证:
|
|
2.2 修改窗口大小
在新的 Git Home 目录下,新建 .minttyrc
文件,内容如下:
📌 包含如下手动设置内容:
- 界面语言
Git Bash » 标题栏 » Options » Window –> UI language –>zh_CN
- 字体
Git Bash » 标题栏 » 选项 » 文本 –> 字体 –>Hack
,12pt
- 窗口
Git Bash » 标题栏 » 选项 » 窗口 –> 默认大小 –> 列数:120
,行数:40
2.3 本地创建项目目录
|
|
2.4 配置 vim
在创建的项目目录下右键 Git Bash Here
添加自定义配置文件:
|
|
2.5 Git 基础配置
换行符配置( 参考文档 ):
📌 换行符说明:
提交时把 CRLF 转换为 LF,检出时把 LF 转换为 CRLF(适用 Windows)git config --global core.autocrlf true
提交时转换为 LF,检出时不转换(适用 macOS/Linux)git config --global core.autocrlf input
提交检出均不转换git config --global core.autocrlf false
拒绝提交包含混合换行符的文件git config --global core.safecrlf true
允许提交包含混合换行符的文件git config --global core.safecrlf false
提交包含混合换行符的文件时给出警告git config --global core.safecrlf warn
查看配置信息
|
|
指定检查 Git 某一项配置
|
|
置空(删除)某一项配置
|
|
获取帮助
|
|
2.6 统一换行符
1、在 Git Home 目录创建 .gitattributes
文件:
|
|
插入以下内容:
2、配置全局生效
|
|
3、重新规范化(可选)
III. 创建版本库
1、版本库又名仓库,英文名repository,可以简单理解成一个目录:
⚠️ 警告:
如果你使用 Windows 系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。
2、通过 git init
命令把这个目录变成Git可以管理的仓库
|
|
3、编写文件 readme.txt ,放入 git 仓库
|
|
4、用命令 git commit
告诉 git,把文件提交到仓库
|
|
可以多次 add
不同文件,比如:
修改仓库文件后,用命令 git status
命令查看结果:
|
|
用命令 git diff
查看修改内容
|
|
IV. 版本控制
4.1 版本回退
查看最近到最远的提交日志
|
|
如果嫌输出信息太多,可以加上 --pretty=oneline
|
|
要退回上一个版本,Git 必须知道当前版本是哪个版本,在 Git 中,用 HEAD
表示当前版本,也就是最新的提交的版本,上一个版本就是 HEAD^
,上上一个版本就是 HEAD^^
,当然往上100个版本写100个 ^
比较容易数不过来,所以写成 HEAD~100
。
现在,我们要把当前版本回退到上一个版本,就可以使用 git reset
命令:
|
|
查看回退版本的内容
|
|
回退到指定版本
|
|
1094a 为 commit id
,查找 commit id
命令
|
|
4.2 工作区和暂存区
工作区就是你在电脑里能看到的目录,比如前面创建的 repo 文件夹就是一个工作区。
版本库(Repository)
工作区有一个隐藏目录 .git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区,还有Git为我们自动创建的第一个分支 master
,以及指向 master
的一个指针叫 HEAD
。
4.3 管理修改
查看工作区和版本库里面最新版本的区别
|
|
4.4 撤销修改
4.4.1 撤销工作区的修改
使用命令:git checkout -- file
|
|
命令 git checkout -- readme.txt
意思就是,把 readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
- 一种是
readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; - 一种是
readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次 git commit
或 git add
时的状态。
⚠️ 警告:
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout
命令。
4.4.2 撤销暂存区修改
使用命令:git reset HEAD <file>
|
|
git reset
命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用 HEAD
时,表示最新的版本。
丢弃工作区修改
4.5 删除文件
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用 rm
命令删了:
|
|
一种情况确实要从版本库中删除该文件,那就用命令 git rm
删掉,并且 git commit
:
💡 Tips:
先手动删除文件,然后使用git rm <file>
和git add<file>
效果是一样的。
另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
|
|
git checkout
其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
⚠️ 警告:
从来没有被添加到版本库就被删除的文件,是无法恢复的!
V. 远程仓库
5.1 SSH Key 配置
使用 SSH 连接到 GitHub:点 这里
5.1.1 检查现有 SSH 密钥
在生成 SSH 密钥之前,您可以检查是否有任何现有的 SSH 密钥
📢 注意:
DSA 密钥 (SSH-DSS) 不再受支持。 现有密钥将继续运行,但您不能将新的 DSA 密钥添加到您的 GitHub 帐户。
a. 打开 Git Bash
b. 输入 ls -al ~/.ssh
以查看是否存在现有 SSH 密钥
c. 检查目录列表以查看是否已经有 SSH 公钥。 默认情况下,公钥的文件名是以下之一
- id_rsa.pub
- id_ecdsa.pub
- id_ed25519.pub
d. 若第三方导入的密钥应注意其权限
5.1.2 生成新 SSH 密钥
|
|
- Linux 实例:
|
|
- Windows 实例
|
|
📢 注意:
如果您使用的是不支持 Ed25519 算法的旧系统,请使用以下命令:ssh-keygen -t rsa -b 4096 -f server-name_id_rsa -C "your_email@example.com"
📌 参数说明:
-o
:(小写)使用新的 OpenSSH 格式(而不是 PEM 格式)保存私钥。实际上,当您将密钥类型指定为ed25519
时,就隐含了此选项;-a
:保存私钥时,该选项指定了所使用的 KDF(密钥生成函数,目前为 bcrypt_pbkdf(3))轮数。 轮数越多,口令验证速度越慢,密码被盗时的暴力破解能力越强。 默认值为16
轮。-t
:指定要创建的密钥类型。 可能的值有ecdsa
、ecdsa-sk
、ed25519
、ed25519-sk
或rsa
。-C
:用于指定注释的选项。它是纯粹的信息,可以是任何东西。但它通常填充<login>@<hostname>
谁生成了密钥;-f
:指定生成的密钥文件的文件名。如果您希望 SSH 代理自动发现它,则必须将它存储在主目录中的默认.ssh
目录中;-i
:读取未加密的ssh-v2
兼容的私钥/公钥文件,然后在标准输出设备上显示 openssh 兼容的私钥/公钥;-l
:显示公钥文件的指纹数据;-N
:提供一个新密语;-P
:提供(旧)密语;-q
:静默模式;
后面的 your_email@example.com
改为你在 GitHub 上注册的邮箱,之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。成功的话会在 Git 家目录下生成 .ssh 文件夹,进去打开 id_ed25519.pub
,复制里面的 key 到剪切板。
|
|
5.1.3 添加 SSH key 到 Github
回到 GitHub 上,进入 Account Settings(账户配置),左边选择 SSH and GPG keys –> New SSH key , Title 随便填,粘贴 id_ed25519.pub
的内容到 Key。
为了验证是否成功,在git bash下输入:
📌 参数说明:
-T :不显示终端,只显示连接成功信息。
ℹ️ 信息:
如果是第一次的会提示是否 continue,输入 yes 就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上 GitHub 。
若测试连接不成功,可用如下命令来调试连接:
|
|
📢 注意:
认证私钥与 Git 家目录下.ssh
目录中私钥文件名是否一致,若不一致可参考 Git 多账号配置。
5.2 添加远程库
5.2.1 创建远程库(略)
5.2.2 本地仓库关联远程库
📢 注意:
user/repo.git
替换为正确的账户名和仓库名。
添加后,远程库的名字就是origin
,这是 Git 默认的叫法。
把本地库的内容推送到远程,用 git push
命令,实际上是把当前分支 master
推送到远程。
由于远程库是空的,我们第一次推送 master
分支时,加上了 -u
参数,Git 不但会把本地的 master
分支内容推送的远程新的 master
分支,还会把本地的 master
分支和远程的 master
分支关联起来,在以后的推送或者拉取时就可以简化命令。
|
|
5.2.3 删除远程库
如果添加的时候地址写错了,或者就是想删除远程库,可以用 git remote rm <name>
命令。使用前,建议先用 git remote -v
查看远程库信息:
|
|
然后,根据名字删除,比如删除 origin
:
|
|
此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。
5.3 从远程库克隆
使用命令 git clone
克隆一个本地库:
|
|
VI. 分支管理
6.1 创建与合并分支
6.1.1 创建并切换到 dev
分支
|
|
git checkout
命令加上 -b
参数表示创建并切换,相当于以下两条命令:
a. 创建 dev
分支
|
|
b. 切换到 dev
分支
|
|
然后,用 git branch
命令查看当前分支:
|
|
6.1.2 合并分支
把 dev
分支与 master
分支合并(当前在 master 分支)
|
|
合并完成后,就可以放心地删除 dev
分支了:
|
|
删除后,查看 branch
,就只剩下 master
分支了:
|
|
6.1.3 提交本地分支到远程仓库
语法:git push origin 本地分支名
下面这条命令表示把本地 dev
分支提交到远程仓库,即创建了远程分支 dev
。
|
|
6.1.4 删除远程分支
|
|
6.2 解决冲突
参考样例:点
这里
使用 git log
命令查看分支合并情况:
|
|
git log
的常用选项:
选项 | 说明 |
---|---|
-p | 按补丁格式显示每个提交引入的差异。 |
–stat | 显示每次提交的文件修改统计信息。 |
–shortstat | 只显示 –stat 中最后的行数修改添加移除统计。 |
–name-only | 仅在提交信息后显示已修改的文件清单。 |
–name-status | 显示新增、修改、删除的文件清单。 |
–abbrev-commit | 仅显示 SHA-1 校验和所有 40 个字符中的前几个字符。 |
–relative-date | 使用较短的相对时间而不是完整格式显示日期(比如“2 weeks ago”)。 |
–graph | 在日志旁以 ASCII 图形显示分支与合并历史。 |
–pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline、short、full、fuller 和 format(用来定义自己的格式)。 |
–oneline | –pretty=oneline –abbrev-commit 合用的简写。 |
6.3 多人协助
查看远程仓库信息,用 git remote
:
|
|
或者,用 git remote -v
显示更详细的信息:
|
|
6.3.1 推送分支
把本地分支推送到远程远程仓库对应分支:
|
|
如果要推送到其它分支,比如 dev
,就改成:
|
|
6.3.2 抓取分支
克隆远程分支
|
|
创建远程 origin
的 dev
分支到本地
|
|
指定本地 dev
分支与远程 origin/dev
分支的链接
|
|
VII. 标签管理
7.1 创建标签
查看当前所在分支
|
|
切换到需要打标签的分支上:
|
|
使用命令 git tag <name>
就可以打一个新标签:
|
|
📢 注意:
标签总是和某个commit
挂钩。如果这个commit
既出现在master
分支,又出现在dev
分支,那么在这两个分支上都可以看到这个标签。
7.2 操作标签
如果标签打错了,可以删除:
|
|
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令 git push origin <tagname>
:
|
|
或者,一次性推送全部尚未推送到远程的本地标签:
|
|
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:
|
|
然后,从远程删除。删除命令也是push,但是格式如下:
|
|
看看是否真的从远程库删除了标签,可以登陆远程仓库查看。
VIII. 参考文档
参考文档:点 这里