Git基础使用和PR贡献
Git 是一种分布式版本控制系统,主要用于管理和跟踪代码等文件的变更,它能够帮助开发者在多人协作开发时记录每一次修改、回退到历史版本、合并不同的更改,并且支持分支开发,方便团队协作和项目管理
简单来说,Git 可以让你高效、安全地管理项目文件的历史和协作过程,是现代软件开发中不可或缺的工具
文章目录
- 本地 Git 基础使用流程
- 分支与主干逻辑
- 分支操作
- 撤销更改
- gitignore
- 常见问题
- 分支切换与内容变动问题
- 如何保存分支更改并切换主干
- 常见错误及解决
- 错误示例
- 其他注意事项
- Git 上传到远程仓库笔记
- Workfolw
- 常见问题
- 通过 PR 贡献项目
参考资料
Pro Git book
如何在 Github 上规范的提交 PR(图文详解) - 知乎
本地 Git 基础使用流程
-
安装 Git
- Windows/macOS:官网下载
- Linux:
sudo apt-get install git
-
初始化本地仓库
git init
对于 Windows 电脑,可以直接在“文件资源管理器”中的地址栏输入 cmd 打开命令窗口
- 配置用户名和邮箱
git config --global user.name "你的昵称" git config --global user.email "你的邮箱"
--global
参数代表“全局配置”,也就是对当前设备上所有仓库统一配置
具体来说:
使用 --global
配置后,所有在本机操作的 Git 仓库,都会默认使用这个用户信息
如果你没有在某个仓库里单独设置(用 --local
),那仓库会继承全局配置
如果你想为某个仓库设置不同的用户名或邮箱,可以在该仓库目录下使用不带 --global
的命令(或加 --local
),比如:
git config user.name "另一个昵称"
git config user.email "另一个邮箱"
这样只影响当前仓库
- 添加文件到暂存区
git add 文件名 # 添加指定文件 git add . # 添加所有文件
这些提示说明 Git 检测到你的换行符和当前系统默认格式不同,操作时会做转换,有特殊需求的话可以进行更改
-
提交到本地仓库
git commit -m "提交说明"
-
常用命令
git status # 查看状态 git log # 查看日志 git diff # 查看变化 git branch # 查看分支
分支与主干逻辑
主干(main/master)
通常是项目的主分支,代表了稳定和可随时发布的代码分支(branch)
开发新功能、修复 Bug 时从主干拉出,开发完成后再合并回主干
分支操作
切换分支
git checkout 分支名
# 或
git switch 分支名
创建并切换新分支
git checkout -b 新分支名
# 或
git switch -c 新分支名
合并分支
git checkout main
git merge 分支名
撤销更改
撤销未暂存的更改
丢弃你对这个文件的修改
git checkout -- 文件名
# 或
git restore 文件名
撤销已暂存但未提交的更改
把已经 git add
到暂存区的内容撤回到未暂存状态(unstaged),不会丢失你的本地修改
git reset HEAD 文件名
撤销最近一次提交
git reset --soft HEAD~1 # 保留更改
git reset --hard HEAD~1 # 丢弃更改
--soft
撤销上一次提交,但保留所有更改在暂存区(staged)
--hard
撤销上一次提交并且丢弃所有本地更改(工作区和暂存区都恢复到上一次提交前的状态)
当存在父提交时才有效”,因为
HEAD~1
指向父提交,对于第一个 commit,它没有父提交,所以命令会报错
gitignore
.gitignore 是一个文本文件,用于告诉 Git 哪些文件或文件夹不需要被版本控制,即不需要被提交到仓库
只要你在项目根目录(或子目录)下创建一个 .gitignore 文件,并写入想要忽略的文件、文件夹或通配规则,Git 就会自动跳过这些内容
# 忽略编译生成的文件
build
如果你先提交了一些文件,再添加 .gitignore
,那些已经被追踪的文件不会自动变成“忽略”,需要手动用 git rm --cached
命令把它们从暂存区移除
你可以一次性移除多个文件:
git rm --cached file1.txt file2.txt
或者整个目录:
git rm --cached -r directory_name
这里换到了 Git Bash 进行操作
常见问题
分支切换与内容变动问题
如果分支有未提交更改,切换分支时这些更改会跟随,导致切换后代码内容没变
解决方法:
- 提交更改
- 暂存更改(
git stash
) - 丢弃更改(
git restore .
或git reset --hard
)
如果工作区有未提交的更改,切换分支时这些更改会被带到目标分支
如果这些更改与目标分支不冲突,Git 会允许切换;如果存在冲突,Git 会阻止切换并提示你先处理这些更改
如果主干和分支内容本来就一样,切换分支后代码自然不会变
使用 git branch
查看当前分支,git status
查看工作区状态
如何保存分支更改并切换主干
未提交更改:
git stash
git checkout main
已提交更改:
git checkout main
在 VSCode 中可以用终端输入上述命令,也可以用源代码管理面板的图形化按钮操作
常见错误及解决
错误示例
git add .
# warning: LF will be replaced by CRLF ...
git commit "test"
# 错误:缺少 -m 参数
正确提交方式:
git commit -m "test"
若提示“no changes added to commit”,说明没有内容被 add
进暂存区,应使用 git status
检查文件状态,然后重新 git add 文件名
再提交
其他注意事项
git reset --hard
会丢弃所有未提交的更改,使用前务必谨慎- 所有 git 命令无论在 CMD、PowerShell 还是 VSCode 终端中都可以通用
- VSCode 的 Git 面板可以辅助完成大部分 Git 操作
如遇特殊情况(如冲突、还原部分文件、远程操作等),建议先用
git status
查看当前状态,再决定操作步骤
Git 上传到远程仓库笔记
Workfolw
- 初始化本地仓库
如果还没有本地仓库,先初始化
git init
- 添加文件到暂存区
将所有文件添加到暂存区
git add .
或者只添加某个文件
git add 文件名
- 提交到本地仓库
提交更改,并添加提交说明
git commit -m "你的提交说明"
- 关联远程仓库
只需要关联一次,之后就不用再操作
git remote add origin 仓库地址
例如
git remote add origin https://github.com/用户名/仓库名.git
- 推送到远程仓库
第一次推送时(以 master 为例)
git push -u origin master
如果你的主分支是 main
git push -u origin main
后续只需用:
git push
此时会弹出窗口提示你登录 github,注意一下自己的网络环境(比如我这里就失败了一次)
常见问题
- 如果远程仓库已有内容,建议先拉取并合并:
git pull origin master
- 如果遇到推送失败,检查是否有权限,或分支名称是否正确
总结
常用命令顺序:git init
→ git add
→ git commit
→ git remote add origin
→ git push
通过 PR 贡献项目
- 在项目主页 Fork 一个项目分支
项目主页,点击Fork
按钮,创建一个新的派生项目 - 将项目
Clone
到本地 - 创建分支,添加/修改内容并合并
- 将内容
push
到远程仓库 - 在远程仓库中发起 PR 合并请求