【Git】使用笔记总结
目录
- 概述
- 安装Git
- 注册GitHub
- 配置Git
- 常用命令
- 常见场景
- 1. 修改文件
- 2. 版本回退
- 3. 分支管理
- 常见问题
- 1. git add [中文文件夹] 无法显示中文问题
- 2. git add [文件夹] 文件名中含有空格
- 3. git add 触发 LF 回车换行警告
- 4. git push 提示不存在 Origin 仓库
- 5. Git与GitHub中默认分支不一致问题
- 6. git pull 提示无法合并无关联仓库
概述
Git 是一个开源的分布式版本控制系统,用于追踪计算机文件的修改,尤其适用于源代码管理。
分布式是指每个开发者的机器上都拥有整个代码库的副本,即使离线也可以继续工作并进行版本控制。
版本管理是指 Git 允许用户对文件进行版本控制,任何时候都可以查看文件的历史版本,并支持回滚到某个特定的历史状态。
安装Git
Git 是跨平台的,官方下载网址。
安装完毕后,桌面右键可打开Git Bash
命令行窗口。输入以下命令检查 Git 版本。
git --version
# git version 2.42.0.windows.1
注册GitHub
GitHub 是一个基于 Git 的远程代码托管平台,即远程仓库。一般通过SSH协议传输文件,可配置SSH密钥来避免每次推送代码均要输入用户名和密码。
- 打开
Git Bash
,生成SSH密钥,默认存储路径一般是~/.ssh/id_rsa
。id_rsa
是私钥,不能泄露。id_rsa.pub
是公钥,可用于身份认证。ssh-keygen -t rsa -b 4096 -C "your.email@example.com"
- 登录GitHub,点击右上角的头像,选择Settings,选择SSH and GPG keys,点击New SSH key,填写标题并粘贴公钥内容,点击Add SSH key
- 可在终端中测试SSH连接
ssh -T git@github.com # Hi Azure-Qiu! You've successfully authenticated, but GitHub does not provide shell access.
- 创建一个新的GitHub仓库,在页面右上角点击
+
,选择New repository。填写仓库名、描述(可选)、选择是否公开,然后点击Create repository。
配置Git
可查看配置清单。
git config --list
初次使用需要配置用户名和邮箱
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
常用命令
在需要进行版本管理的项目文件夹中,初始化 Git 仓库。Git 会在当前目录下创建一个隐藏的.git
文件夹,这是 Git 仓库的核心。
# 初始化一个新的 Git 仓库,并指定初始分支为 main
git init --initial-branch=main
可以克隆一个现有的远程仓库。
仓库(
repository
):又称版本库,这个目录里面的所有文件都可以被 Git 管理。
- 工作区:即项目文件目录,可以添加、删除、修改文件。
- 暂存区:
add
将文件保存在暂存区。- 本地仓库:
commit
是将暂存区中的文件一次性提交给本地仓库。- 远程仓库:通常使用GitHub作为远程仓库。
git clone https://github.com/username/repository.git
将文件添加到暂存区
# 添加文件
git add LED篇1.1 点亮第一个LED
# 添加所有更改
git add .
# 查看当前仓库文件状态(未添加的,添加至暂存区的)
git status
提交暂存区的更改至本地仓库
# 附加本次提交的说明
git commit -m "Commit message"
# 查看提交历史,按 q 退出
git log
# 单行显示
git log --pretty=oneline
关联本地仓库与远程仓库
# origin:远程仓库默认命名
# username:GitHub用户名
# repository:新建GitHub仓库名
git remote add origin git@github.com:username/repository.git
# 列出所有存在的远程仓库
git remote
从远程仓库获取最新代码并合并到本地仓库。
先拉取后推送可以避免合并冲突
# 拉取代码
git pull origin main
# 合并不同历史
git pull origin main --allow-unrelated-histories
推送至远程仓库
# 首次推送,-u使得本地分支和远程分支建立关联
git push -u origin main
# 后续推送
git push origin main
常见场景
1. 修改文件
情景1:针对于已添加至暂存区或已提交至本地仓库的文件,git status
可以查看哪些文件发生了改动,git diff
可以跟踪文件中的具体改动内容。
# git diff [filename]
git diff main.c
确认修改内容无误后即可git add
并git commit
提交修改后的文件。
假设修改内容有误,可以通过以下命令撤销修改。
# 可以丢弃工作区的修改
git checkout -- filename
分两种情况
- 如果修改还未添加至暂存区,则回退至未修改前,包括恢复误删文件。
- 如果修改已添加至暂存区,则回退至与暂存区的版本一致
2. 版本回退
针对于已提交至本地仓库的文件,假设想要放弃本地的修改,可通过以下方式进行版本回退(本质是移动HEAD指针)。回退后git log
不再显示后面的记录。
# 回退至上个版本
git reset --hard HEAD^
# 回退至上上个版本
git reset --hard HEAD^^
# 回退至前100个版本
git reset --hard HEAD~100
假设回退后不满意,又想重新回退至之前的版本,可以通过以下方式。
# git reset --hard 版本号,版本号写前几位即可
git reset --hard 19da72
# 查询版本号,会记录所有版本的更替
git reflog
3. 分支管理
为了同时推进多个任务, 可以为每个任务创建单独的分支(副本)。在副本上的操作不会影响主分支,大大提高了开发效率。
查看分支
git branch -v
创建分支,对当前主分支创建一个副本。
# test为分支名
git branch test
切换分支
git checkout test
在分支上完成修改后,即可合并至主分支。如果两个分支在某处存在不同的修改,则会产生冲突,必须人为决定。
# 先切换至主分支
git merge test
删除分支
# 先切换至主分支
git branch -d test
常见问题
1. git add [中文文件夹] 无法显示中文问题
- 在
git bash
终端输入命令:git config --global core.quotepath false
- 在
git bash
终端窗口内右键,选择Options
->Text
-> Locale 选择zh_CN
-> Character set 选择UTF-8
2. git add [文件夹] 文件名中含有空格
空格用" "
代替,例如:添加文件名为my file
的文件
git add my" "file
3. git add 触发 LF 回车换行警告
完整警告日志如下
LF will be replaced by CRLF the next time Git touches it
CR
:Carriage Return
,即回车,表示回到一行的开头。其转义字符为'\r'
,ASCII码为13,十六进制为0x0D
。LF
:Line Feed
,即换行,表示另起一行。其转义字符为'\n'
,ASCII码为10,十六进制为0x0A
。
在Windows、DOS系统中,使用回车+换行(\r\n
)来结束一行。即 Enter 键实际插入回车与换行两个字符。例如在串行通信中,需要输出\r\n
才会换行。
而在Linux、Mac系统中,只使用换行(\n
)一个字符来结束一行。例如在C语言编程中,\n
可以使输出语句换行。
在 git 中,默认开启换行符自动转换。可以通过关闭自动转换来消除警告。
git config --global core.autocrlf false
但不建议关闭,在跨平台开发时,该功能可以避免意外错误。建议忽略该警告。
4. git push 提示不存在 Origin 仓库
在执行git push origin master
命令时,git 警告如下
fatal: 'origin' does not appear to be a git repository
fatal: Could not read from remote repository.
这是由于本地仓库未关联远程仓库。
# 列出所有存在的远程仓库
git remote
# 列出所有远程仓库的详细信息
git remote -v | git remote --verbose
# 添加一个远程仓库,url在GitHub仓库中获得
git remote add [name] [url]
# 删除一个远程仓库,其中name为远程仓库名
git remote remove [name]
5. Git与GitHub中默认分支不一致问题
Git中默认分支为master
,而GitHub中默认分支为main
,建议统一为main
# 重命名本地分支
# git branch -m [旧分支名] [新分支名]
git branch -m master main
6. git pull 提示无法合并无关联仓库
执行 git pull origin main
时,报错信息如下
fatal: refusing to merge unrelated histories
Git 默认不允许将两个没有共同历史的仓库合并,以避免冲突或丢失数据。可采用以下命令强制合并。
git pull origin main --allow-unrelated-histories