git与github使用方法
学习一下如何使用git与github对代码进行管理
git与github的关系
Git是一种分布式版本控制系统,由Linus Torvalds于2005年创建。它用于跟踪文件和代码的变化,使团队成员能够在不干扰其他人工作的情况下协同开发项目。每个开发人员都可以在自己的本地计算机上创建、修改和提交代码的版本,然后将这些变更推送到共享的代码仓库。
而GitHub是一个基于Git的代码托管平台。它提供了一个在线的服务,使开发者能够轻松地将他们的Git代码仓库托管在云端。GitHub除了支持基本的代码托管功能外,还提供了诸如协作、问题追踪、代码审核、持续集成等功能,使得团队合作更加高效。
简而言之,Git是一种版本控制系统,而GitHub是基于Git的代码托管平台,为开发者提供了更便捷的协作和管理代码的方式。
描述来自chatGPT。
写在前面:
如果想要在本地创建了git仓库并且和github连接到一起,先用git init在本地初始化,再在github上创建自己对应的仓库。按照本文一步一步走即可。
Git
使用步骤以及介绍。
安装
- Linux-Ubuntu
1 | apt-get install git |
- Windows
官网下载可以:Git。
或者若是安装了winget,可以使用终端:
1 | winget install --id Git.Git -e --source winget |
- Mac安装
使用Homebrew
1 | brew install git |
Git 基本配置
Git提供git config命令配置或读取工作环境变量。这些变量会影响在操作Git的方式或者行为。
- 配置用户信息
配置个人的用户名称和电子邮件地址,这是为了在每次提交代码时记录提交者的信息:
这里设置全局的
不是每次创建一个git仓库都需要设置。设置一次就可以了。
1 | git config --global user.name"你的昵称" |
如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。
如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。
不需要一定和github的用户名与电子邮件对应。但是设置成一样的github才能将这次提交记录为自己的贡献。
- 生成SSH秘钥(可选)
若要痛感SSH进行git操作,可以生成SSH秘钥添加到Git托管服务(如:Github)。
1 | ssh-keygen -t rsa -b 4096 -C "your.email@example.com" |
按提示完成生成过程,然后将生成的公钥添加到相应的平台。
github也有配置说明
- 在终端验证安装,确保成功配置
1 | git --version |
显示当前git配置信息:
1 | git config --list |
Git工作流程

工作区(Working Directory)
实际上项目文件所在位置,我们在这里对我代码进行编辑。
暂存区(Staging Area)
通过git add提交的内容存储的位置,在正式提交的指令git commit执行前的临时存储。
本地仓库 (Local Repository)
使用git commit正式提交到的位置,正式为这个修改形成记录。
远程仓库 (Remote) —— 如Github或者Gitlab
在github上为该项目创建respository,使用git push将本地仓库内容同步到github,与他人合作。主要用于备份代码、团队合作。
其他
-
git stash(贮藏区):非正式版本的提交。你当前的任务尚未完成,临时来了个需求需要完成,若commit则会污染仓库的记录,复制项目又太过笨重,可使用该命令:- 保存当前所有修改
- 恢复到最近一次commit状态
然后使用git checkout hotfix修改临时需求。这个临时任务完成后,可以使用git stash pop恢复刚才任务的修改记录。
-
git pull:从远程仓库拉去最新的进度 -
git fetch & merge: 看看远程是否有更新(fetch),确认没有问题后与本地仓库合并(merge)
创建项目后的提交过程
- 初始化
在你的对应文件夹或者文件所在位置进行初始化。
git init
在当前目录下初始化你的git管理,会生成一个隐藏.git文件夹,文件夹中保存每个git版本记录和变化。
此时文件还没有被记录
- 存到暂存区
1 | git add [文件名] |
将所有的更改文件添加到暂存区,存储到暂存区后,commit会把暂存区的东西提交到仓库。
若是该文件路径下的所有文件,则为
git add .
项目中不推荐使用全部add的方法,首先会导致提交记录不清晰,其次是可能导入临时的数据、改变子目录结构等。
- 提交到仓库
git commit
但推荐本文段最后那个命令,一次搞定
将暂存的修改提交为一个固定的版本(到本地仓库)。
提交后会打开一个vim的终端编辑器,这里要求写你的提交说明。
vim操作详见vim的教程。
简单说明:
进入这个步骤的时候还不能直接输入,按下(二选一):
- a : 光标之后开始插入文本
- i : 光标之前开始插入文本
编辑完成后,按下esc推出拜年祭模式。
然后输入:wq保存文件并退出。
本次提交就算完成了。
简化版(推荐):
git commit -m "提交的说明"
跳过vim编辑。
提交信息的书写规范,遵守Converntional Commits规范,按照
<type>(<scope>):<description>
- <type> 提交类型,常见的有:fix修复了bug,feat新增功能,docs文档更新,style代码格式化,refactor重构代码,test测试代码。
- <scope>提交的影响范围
- <description>对本次提交的简单描述
vscode也自带了这些git的提交流程,可以研究一下。
- 查看提交信息
git log
- 本次提交的随机aid
- 提交的人
- Date:日期
- 提交的说明
回退(重置)到某个版本状态
- git log查看版本信息
- 找到对应的随机编号
git rest --hard 版本编号
reset会把回到的这个版本之后的版本也清空(撤销这个版本之后的所有记录)。
如果不想清空记录,我还不会。
分支branch
用于团队开发。
-
创建分支
git branch <branchName> -
进入分支
git checkout -
合并分支
在主分支进行操作:
git merge <合进来的分支名称>
Github
创建远程仓库以及初始化
首先,自己创建一个repository在github上面。
进入这个页面,下面的是叫你如何在自己的代码处创建git仓库和与github该仓库链接的简单教程。
git branch -M main是一个 Git 命令,用于将当前分支重命名为 main。github现在默认创建的主要分支叫做main了,以前叫master。
这里建议设置一下。因为之前下载git的你可能不记得自己设置的git默认主分支是master还是main了。
当前项目的git分支可以通过git branch -a查看。
其实就是上图中,仓库初始化后的网站上提示的操作。
-
git remote add origin XXXXX:添加一个远程仓库地址。 -
git push -u origin main推送上传到这个github的远程仓库。- 可能需要输入github的邮箱和密码
合作
在 GitHub 或其他托管平台上创建 Pull Request,邀请团队成员进行代码审查。PR 合并后,你的更改就会合并到主分支。
- 合并更改
在 PR 审核通过并合并后,可以将远程仓库的主分支合并到本地分支:
1 | git checkout main |
- 删除分支
从本地删除:
1 | git branch -d new-feature |
从远程删除:
1 | git push origin --delete new-feature |
补充:push时失误上传了大文件如何补救
在一次推送项目的时候忘记加入.gitignore 了,导致我的png数据集全部被列入了推送list,好多个G,严重影响了我的上传速度。这里介绍:在git push 后如何终止并重新上传。
-
首先使用 ctrl+C 停止当前的进度。
-
从Git中移除所有文件:
git rm -r --cached . -
重新添加所有文件
git add . -
提交
git commit -m "Add .gitignore" -
推送到Github
git push -u origin main
如果还不得行,就删除项目文件夹中.git ,然后重新开始init……
遇事不决删历史。
Commit文档规范
在commit代码的时候,备注应该怎么写呢?
Git commit的注解规范可以参考以下内容:
- 每个提交应该有一个简短的标题,不超过50个字符,使用大写字母和祈使语气。
- 标题和正文之间应该有一个空行。
- 正文应该简要描述本次提交的目的和具体做了什么操作。
- 如果需要,可以在正文中添加备注或说明。
- 提交信息应该尽可能准确地描述本次提交内容。
- 可以使用以下标识来说明提交的类别:
feat:新功能(feature)。fix:修复bug。docs:文档(documentation)。style:格式(不影响代码运行的变动)。refactor:重构(即不是新增功能,也不是修改bug的代码变动)。perf:优化相关,比如提升性能、体验。test:增加测试。chore:构建过程或辅助工具的变动。revert:回滚到上一个版本。merge:代码合并。sync:同步主线或分支的Bug。
总结
简单版本的每次提交流程:
1 | # 初始化项目,在项目根目录下(若一开始准备用github,创建仓库后也有对应教程) |
从远程仓库到本地版本库:
1 | git pull origin branch-name |
从github中靠背项目
1 | git clone <repo> |
或指定目的地路径:
1 | git clone <repo> <directory> |
Git 常用命令速查
由GPT生成总结
说明:
- 本地:仅在本地仓库操作,不涉及 GitHub 等远程仓库。
- 远程:已经关联 GitHub/GitLab 等远程仓库。
1. 创建仓库(Repository)
本地仓库
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git init |
无 | 初始化当前目录为 Git 仓库 | git init |
git init <目录> |
无 | 创建并初始化仓库 | git init demo |
git clone <仓库地址> |
-b <分支> |
克隆远程仓库 | git clone https://github.com/user/demo.git |
git clone -b dev <仓库地址> |
-b |
克隆指定分支 | git clone -b dev https://... |
git status |
-s |
查看仓库状态 | git status -s |
已关联远程仓库
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git remote add origin <url> |
无 | 添加远程仓库 | git remote add origin https://github.com/... |
git remote -v |
无 | 查看远程仓库 | git remote -v |
git remote remove origin |
无 | 删除远程仓库 | git remote remove origin |
git remote rename origin github |
无 | 修改远程名称 | git remote rename origin github |
2. 提交与修改
本地仓库
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git status |
-s |
查看状态 | git status |
git add <文件> |
无 | 添加指定文件到暂存区 | git add main.py |
git add . |
无 | 添加当前目录所有修改 | git add . |
git add -A |
无 | 添加所有修改(包括删除) | git add -A |
git restore <文件> |
无 | 撤销工作区修改 | git restore main.py |
git restore --staged <文件> |
无 | 撤销暂存 | git restore --staged main.py |
git rm <文件> |
-r |
删除文件并提交删除 | git rm test.py |
git mv <旧> <新> |
无 | 重命名文件 | git mv a.txt b.txt |
git commit -m |
-m |
提交 | git commit -m "完成登录" |
git commit --amend |
--no-edit |
修改最近一次提交 | git commit --amend |
本地临时保存(stash)
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git stash |
无 | 临时保存修改 | git stash |
git stash -u |
--include-untracked |
连新文件一起保存 | git stash -u |
git stash list |
无 | 查看 stash | git stash list |
git stash pop |
无 | 恢复并删除 stash | git stash pop |
git stash apply |
无 | 恢复但保留 stash | git stash apply |
git stash drop stash@{0} |
无 | 删除指定 stash | git stash drop stash@{0} |
git stash clear |
无 | 删除所有 stash | git stash clear |
3. 提交日志(History)
本地仓库
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git log |
无 | 查看提交历史 | git log |
git log --oneline |
无 | 一行显示 | git log --oneline |
git log --graph |
--all |
图形化查看 | git log --graph --all |
git show |
<commit> |
查看提交详情 | git show HEAD |
git diff |
无 | 查看工作区修改 | git diff |
git diff --cached |
无 | 查看暂存区修改 | git diff --cached |
git diff HEAD~1 |
无 | 与上一版本比较 | git diff HEAD~1 |
git blame <文件> |
无 | 查看每行是谁修改的 | git blame main.py |
版本回退
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git reset --soft HEAD~1 |
--soft |
回退提交,保留暂存 | git reset --soft HEAD~1 |
git reset --mixed HEAD~1 |
--mixed |
回退提交,保留修改 | git reset --mixed HEAD~1 |
git reset --hard HEAD~1 |
--hard |
强制回退(危险) | git reset --hard HEAD~1 |
git revert <commit> |
无 | 撤销某次提交(推荐) | git revert a1b2c3 |
4. 远程操作(GitHub)
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git fetch |
origin |
拉取远程更新(不合并) | git fetch origin |
git pull |
origin main |
拉取并合并 | git pull origin main |
git pull --rebase |
无 | 拉取并变基 | git pull --rebase |
git push |
origin main |
推送代码 | git push origin main |
git push -u origin main |
-u |
首次推送并建立跟踪 | git push -u origin main |
git push --force |
--force-with-lease |
强制推送 | git push --force |
git fetch --all |
无 | 获取所有远程更新 | git fetch --all |
git remote -v |
无 | 查看远程仓库 | git remote -v |
5. 分支管理
本地分支
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git branch |
无 | 查看本地分支 | git branch |
git branch -a |
无 | 查看所有分支 | git branch -a |
git branch <名称> |
无 | 创建分支 | git branch dev |
git switch <分支> |
无 | 切换分支(推荐) | git switch dev |
git switch -c <分支> |
无 | 创建并切换 | git switch -c dev |
git checkout <分支> |
无 | 切换分支(旧命令) | git checkout dev |
git checkout -b <分支> |
无 | 创建并切换(旧命令) | git checkout -b dev |
git merge <分支> |
无 | 合并分支 | git merge dev |
git rebase <分支> |
无 | 变基 | git rebase main |
git branch -d <分支> |
-D |
删除分支 | git branch -d dev |
远程分支
| 命令 | 常用参数 | 作用 | 示例 |
|---|---|---|---|
git push origin <分支> |
无 | 推送分支 | git push origin dev |
git push -u origin <分支> |
-u |
首次推送并建立跟踪 | git push -u origin dev |
git fetch origin |
无 | 获取远程分支 | git fetch origin |
git branch -r |
无 | 查看远程分支 | git branch -r |
git switch --track origin/<分支> |
无 | 跟踪远程分支 | git switch --track origin/dev |
git pull origin <分支> |
无 | 拉取指定分支 | git pull origin dev |
git push origin --delete <分支> |
无 | 删除远程分支 | git push origin --delete dev |
常见参数速查
| 参数 | 含义 |
|---|---|
-m |
提交说明(message) |
-u |
建立上游(upstream)跟踪关系 |
-a |
所有(all) |
-A |
添加所有修改(包括删除) |
-s |
简洁输出(short) |
-b |
创建或指定分支(branch) |
-d |
删除分支(安全删除) |
-D |
强制删除分支 |
-r |
递归(recursive)或远程(remote),视命令而定 |
-v |
显示详细信息(verbose) |
--cached |
仅查看/操作暂存区 |
--soft |
回退但保留暂存区 |
--mixed |
回退但保留工作区(默认) |
--hard |
强制回退,丢弃所有修改 |
--amend |
修改最近一次提交 |
--graph |
图形化显示提交历史 |
--oneline |
一行显示日志 |
--force |
强制推送 |
--force-with-lease |
更安全的强制推送 |
--rebase |
使用变基方式拉取或整理提交 |
--include-untracked (-u) |
stash 时包含未跟踪文件 |
----
【参考文献】
- [B站的教学视频:git、github 保姆级教程入门](https://www.bilibili.com/video/BV1s3411g7PS/?spm_id_from=333.337.search-card.all.click&vd_source=69a3eecb8fce5149ffe1597cbbfc9364)
- 有一个闯关形式的git练习,很有创意,但是我没学会:[git游戏](https://learngitbranching.js.org/?locale=zh_CN)

