1. 注册账户以及创建仓库

要想使用 GitHub 第一步当然是注册 GitHub 账号了, GitHub 官网地址:https://github.com/ 。 之后就可以创建仓库了,Create a New Repository,填好名称后 Create,之后会出现一些仓库的配置信息,这也是一个 Git 的简单教程。

2. 配置Git

2.1 修改默认 HOME 目录

2.1.1 打开环境变量设置

  1. 按下 【Win + R】,输入 sysdm.cpl,回车。

  2. 进入“系统属性” -> 高级 -> 环境变量。

2.1.2 添加或修改 HOME 环境变量

  1. 在“系统变量” 中,点击“新建”或“编辑”。

  2. 变量名:

1HOME
  1. 变量值,填写你想设置的路径,比如:
1C:\Users\[UserName]\Git

2.1.3 验证修改

设置完成后,关闭并重新打开 Git Bash 或其他终端工具。输入以下命令验证:

1echo $HOME

2.2 修改窗口大小

在新的 Git Home 目录下,新建 .minttyrc 文件,内容如下:

1Language=zh_CN
2Font=Maple Mono Normal NL NF CN
3FontHeight=12
4Columns=120
5Rows=40

📌 包含如下手动设置内容:

  • 界面语言
    Git Bash » 标题栏 » Options » Window –> UI language –> zh_CN
  • 字体
    Git Bash » 标题栏 » 选项 » 文本 –> 字体 –> Hack, 12pt
  • 窗口
    Git Bash » 标题栏 » 选项 » 窗口 –> 默认大小 –> 列数:120,行数:40

2.3 本地创建项目目录

1E:\Codes\Java

2.4 配置 vim

在创建的项目目录下右键 Git Bash Here

1# 先备份 vim
2cp /etc/vimrc /etc/vimrc.bak
3
4#配置 vim 
5vim vimrc

添加自定义配置文件:

1curl https://gitee.com/zanxj/vimrc/raw/main/vimrc > ~/.vimrc

2.5 Git 基础配置

1git config --global user.name "userName"
2git config --global user.email userName@example.com
3git config --global core.editor vim
4git config --global color.ui true
5git config --global core.autocrlf input
6git config --global core.safecrlf true

换行符配置(参考文档 ):

📌 换行符说明:
提交时把 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

查看配置信息

1git config --list

指定检查 Git 某一项配置

1git config user.name

置空(删除)某一项配置

1git config --global --unset user.name

获取帮助

1git help config

2.6 统一换行符

参考👉 解决不同系统换行符号导致的Git同步问题

1、在 Git Home 目录创建 .gitattributes 文件:

1touch ~/.gitattributes

插入以下内容:

1# Auto detect text files and perform LF normalization * text=auto eol=lf
2* text=auto eol=lf
3
4# To use only for specific files, such as .sh or .py, you can use:
5# *.sh text eol=lf
6# *.py text eol=lf

2、配置全局生效

1git config --global core.attributesfile ~/.gitattributes

3、重新规范化(可选)

1# 1. 首先提交当前的更改(如果有的话)
2git add .
3git commit -m "Save current changes"
4
5# 2. 然后重新规范化文件
6git add --renormalize .
7git commit -m "Normalize line endings"

3. 创建版本库

1、版本库又名仓库,英文名repository,可以简单理解成一个目录:

1mkdir repo
2cd repo

⚠️ 警告:
如果你使用 Windows 系统,为了避免遇到各种莫名其妙的问题,请确保目录名(包括父目录)不包含中文。

2、通过 git init 命令把这个目录变成Git可以管理的仓库

1git init

3、编写文件 readme.txt ,放入 git 仓库

1git add readme.txt

4、用命令 git commit 告诉 git,把文件提交到仓库

1 git commit -m "wrote a readme file"

可以多次 add 不同文件,比如:

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

修改仓库文件后,用命令 git status 命令查看结果:

1git status

用命令 git diff 查看修改内容

1git diff readme.txt

4. 版本控制

4.1 版本回退

查看最近到最远的提交日志

1git log

如果嫌输出信息太多,可以加上 --pretty=oneline

1git log --pretty=oneline

要退回上一个版本,Git 必须知道当前版本是哪个版本,在 Git 中,用 HEAD 表示当前版本,也就是最新的提交的版本,上一个版本就是 HEAD^,上上一个版本就是 HEAD^^,当然往上100个版本写100个 ^ 比较容易数不过来,所以写成 HEAD~100

现在,我们要把当前版本回退到上一个版本,就可以使用 git reset 命令:

1git reset --hard HEAD^

查看回退版本的内容

1cat readme.txt

回退到指定版本

1git reset --hard 1094a

1094a 为 commit id ,查找 commit id 命令

1git reflog

4.2 工作区和暂存区

工作区就是你在电脑里能看到的目录,比如前面创建的 repo 文件夹就是一个工作区。

版本库(Repository)
工作区有一个隐藏目录 .git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区,还有Git为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD

Pic_2024-08-26_224910.png

4.3 管理修改

查看工作区和版本库里面最新版本的区别

1git diff HEAD -- readme.txt 

4.4 撤销修改

4.4.1 撤销工作区的修改

使用命令:git checkout -- file

1git checkout -- readme.txt

命令 git checkout -- readme.txt 意思就是,把 readme.txt 文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是 readme.txt 自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是 readme.txt 已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

总之,就是让这个文件回到最近一次 git commitgit add 时的状态。

⚠️ 警告:
git checkout -- file 命令中的 -- 很重要,没有 -- ,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到 git checkout 命令。

4.4.2 撤销暂存区修改

使用命令:git reset HEAD <file>

1git reset HEAD readme.txt

git reset 命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用 HEAD 时,表示最新的版本。

丢弃工作区修改

1git checkout -- readme.txt
2git status

4.5 删除文件

一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用 rm 命令删了:

1rm test.txt

一种情况确实要从版本库中删除该文件,那就用命令 git rm 删掉,并且 git commit

1git rm test.txt
2git commit -m "remove test.txt"

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

另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:

1git checkout -- test.txt

git checkout 其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

⚠️ 警告:
从来没有被添加到版本库就被删除的文件,是无法恢复的!

5. 远程仓库

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 密钥

1ls -al ~/.ssh
2# Lists the files in your .ssh directory, if they exist

c. 检查目录列表以查看是否已经有 SSH 公钥。 默认情况下,公钥的文件名是以下之一

  • id_rsa.pub
  • id_ecdsa.pub
  • id_ed25519.pub

d. 若第三方导入的密钥应注意其权限

1cd ~/.ssh/
2chmod 644 id_ed25519

5.1.2 生成新 SSH 密钥

1ssh-keygen -t ed25519 -f ./your_host_name_ed25519 -C "your_email@example.com"
  • Linux 实例:
1ssh-keygen -o -a 512 -t ed25519 -f ~/.ssh/aliyun_ed25519 -C "your_email@example.com"
  • Windows 实例
1ssh-keygen -t ed25519 -f /e/path/yx_ed25519 -C "your_email@example.com"

📢 注意:
如果您使用的是不支持 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:指定要创建的密钥类型。 可能的值有 ecdsaecdsa-sked25519ed25519-skrsa
-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 到剪切板。

1clip < ~/.ssh/your_host_name_ed25519.pub

5.1.3 添加 SSH key 到 Github

回到 GitHub 上,进入 Account Settings(账户配置),左边选择 SSH and GPG keys –> New SSH key , Title 随便填,粘贴 id_ed25519.pub 的内容到 Key。

Pic_2024-08-26_225010.png

为了验证是否成功,在git bash下输入:

1# Github 测试
2ssh -T git@github.com 
3
4# Gitee 测试
5ssh -T git@gitee.com
6
7# Coding.net 测试
8ssh -T git@e.coding.net

📌 参数说明:
-T :不显示终端,只显示连接成功信息。

ℹ️ 信息:
如果是第一次的会提示是否 continue,输入 yes 就会看到:You’ve successfully authenticated, but GitHub does not provide shell access 。这就表示已成功连上 GitHub 。

若测试连接不成功,可用如下命令来调试连接:

1ssh -v git@github.com

📢 注意:
认证私钥与 Git 家目录下 .ssh 目录中私钥文件名是否一致,若不一致可参考 Git 多账户配置。

Git 多账户配置

5.2 添加远程库

5.2.1 创建远程库(略)

5.2.2 本地仓库关联远程库

1cd repertory
2git init -b main
3git remote add origin git@github.com:user/repo.git
4git pull --rebase origin main
5git add .
6git commit -m "Initial commit"
7git branch -M main
8git push -u origin master

📢 注意:
user/repo.git 替换为正确的账户名仓库名
添加后,远程库的名字就是 origin,这是 Git 默认的叫法。

把本地库的内容推送到远程,用 git push 命令,实际上是把当前分支 master 推送到远程。

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

1git push origin master

5.2.3 删除远程库

如果添加的时候地址写错了,或者就是想删除远程库,可以用 git remote rm <name> 命令。使用前,建议先用 git remote -v 查看远程库信息

1git remote -v

然后,根据名字删除,比如删除 origin

1git remote rm origin

此处的“删除”其实是解除了本地和远程的绑定关系,并不是物理上删除了远程库。远程库本身并没有任何改动。

5.3 从远程库克隆

使用命令 git clone 克隆一个本地库(“无别名克隆”参考:Git 多账户配置

1git clone github:account/repo.git

6. 分支管理

6.1 创建与合并分支

6.1.1 创建并切换到 dev 分支

1git switch -c dev

git checkout 命令加上 -b 参数表示创建并切换,相当于以下两条命令:

a. 创建 dev 分支

1git branch dev

b. 切换到 dev 分支

1git switch dev

然后,用 git branch 命令查看当前分支

1git branch

6.1.2 合并分支

dev 分支与 master 分支合并(当前在 master 分支)

1git merge dev

合并完成后,就可以放心地删除 dev 分支了

1git branch -d dev

删除后,查看 branch,就只剩下 master 分支了

1git branch

6.1.3 提交本地分支到远程仓库

语法:git push origin 本地分支名

下面这条命令表示把本地 dev 分支提交到远程仓库,即创建了远程分支 dev

1git push origin dev

6.1.4 删除远程分支

1git push --delete origin dev

6.2 解决冲突

参考样例:点这里

使用 git log 命令查看分支合并情况:

1git log --graph --pretty=oneline --abbrev-commit

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

1git remote

或者,用 git remote -v 显示更详细的信息:

1git remote -v

6.3.1 推送分支

把本地分支推送到远程远程仓库对应分支:

1git push origin master

如果要推送到其它分支,比如 dev ,就改成:

1git push origin dev

6.3.2 抓取分支

克隆远程分支(“无别名克隆”参考:Git 多账户配置

1git clone github:account/repo.git

创建远程 origindev 分支到本地

1git switch -c dev origin/dev

指定本地 dev 分支与远程 origin/dev 分支的链接

1 git branch --set-upstream-to=origin/dev dev

7. 标签管理

7.1 创建标签

查看当前所在分支

1git branch

切换到需要打标签的分支上:

1git switch master

使用命令 git tag <name> 就可以打一个新标签:

1git tag v1.0

📢 注意:
标签总是和某个 commit 挂钩。如果这个 commit 既出现在 master 分支,又出现在 dev 分支,那么在这两个分支上都可以看到这个标签。

7.2 操作标签

如果标签打错了,可以删除:

1git tag -d v1.0

因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

如果要推送某个标签到远程,使用命令 git push origin <tagname>

1git push origin v1.0

或者,一次性推送全部尚未推送到远程的本地标签:

1git push origin --tags

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

1git tag -d v0.9

然后,从远程删除。删除命令也是push,但是格式如下:

1git push origin :refs/tags/v0.9

看看是否真的从远程库删除了标签,可以登陆远程仓库查看。

8. 参考文档

参考文档:点这里