git与github使用方法

学习一下如何使用git与github对代码进行管理

git与github的关系

Git是一种分布式版本控制系统,由Linus Torvalds于2005年创建。它用于跟踪文件和代码的变化,使团队成员能够在不干扰其他人工作的情况下协同开发项目。每个开发人员都可以在自己的本地计算机上创建、修改和提交代码的版本,然后将这些变更推送到共享的代码仓库。

而GitHub是一个基于Git的代码托管平台。它提供了一个在线的服务,使开发者能够轻松地将他们的Git代码仓库托管在云端。GitHub除了支持基本的代码托管功能外,还提供了诸如协作、问题追踪、代码审核、持续集成等功能,使得团队合作更加高效。

简而言之,Git是一种版本控制系统,而GitHub是基于Git的代码托管平台,为开发者提供了更便捷的协作和管理代码的方式。

描述来自chatGPT。


写在前面:
如果想要在本地创建了git仓库并且和github连接到一起,先用git init在本地初始化,再在github上创建自己对应的仓库。按照本文一步一步走即可。

Git

使用步骤以及介绍。

安装

  1. Linux-Ubuntu
1
apt-get install git
  1. Windows
    官网下载可以:Git

或者若是安装了winget,可以使用终端:

1
winget install --id Git.Git -e --source winget
  1. Mac安装
    使用Homebrew
1
brew install git

Git 基本配置

Git提供git config命令配置或读取工作环境变量。这些变量会影响在操作Git的方式或者行为。

  1. 配置用户信息

配置个人的用户名称和电子邮件地址,这是为了在每次提交代码时记录提交者的信息:

这里设置全局的
不是每次创建一个git仓库都需要设置。设置一次就可以了。

1
2
git config --global user.name"你的昵称"
git config --global user.email"你的邮箱"

如果用了 --global 选项,那么更改的配置文件就是位于你用户主目录下的那个,以后你所有的项目都会默认使用这里配置的用户信息。

如果要在某个特定的项目中使用其他名字或者电邮,只要去掉 --global 选项重新配置即可,新的设定保存在当前项目的 .git/config 文件里。

不需要一定和github的用户名与电子邮件对应。但是设置成一样的github才能将这次提交记录为自己的贡献。

  1. 生成SSH秘钥(可选)

若要痛感SSH进行git操作,可以生成SSH秘钥添加到Git托管服务(如:Github)。

1
ssh-keygen -t rsa -b 4096 -C "your.email@example.com"

按提示完成生成过程,然后将生成的公钥添加到相应的平台。

github也有配置说明

  1. 在终端验证安装,确保成功配置
1
2
git --version
git config --list

显示当前git配置信息:

1
git config --list

Git工作流程

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)

创建项目后的提交过程

  1. 初始化

在你的对应文件夹或者文件所在位置进行初始化。

git init
在当前目录下初始化你的git管理,会生成一个隐藏.git文件夹,文件夹中保存每个git版本记录和变化。

此时文件还没有被记录

  1. 存到暂存区
1
git add [文件名]

将所有的更改文件添加到暂存区,存储到暂存区后,commit会把暂存区的东西提交到仓库。

若是该文件路径下的所有文件,则为git add .
项目中不推荐使用全部add的方法,首先会导致提交记录不清晰,其次是可能导入临时的数据、改变子目录结构等。

  1. 提交到仓库
    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:日期
- 提交的说明

回退(重置)到某个版本状态

  1. git log查看版本信息
  2. 找到对应的随机编号
  3. git rest --hard 版本编号

reset会把回到的这个版本之后的版本也清空(撤销这个版本之后的所有记录)。

如果不想清空记录,我还不会。

分支branch

用于团队开发。

  1. 创建分支
    git branch <branchName>

  2. 进入分支
    git checkout

  3. 合并分支
    在主分支进行操作:
    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的邮箱和密码

推送到远程仓库前

在推送本地更改之前,最好从远程仓库拉取最新的更改,以避免冲突:

1
2
3
git pull origin main
# 或者如果在新的分支上工作
git pull origin new-feature

合作

在 GitHub 或其他托管平台上创建 Pull Request,邀请团队成员进行代码审查。PR 合并后,你的更改就会合并到主分支。

  1. 合并更改

在 PR 审核通过并合并后,可以将远程仓库的主分支合并到本地分支:

1
2
3
git checkout main
git pull origin main
git merge new-feature
  1. 删除分支

从本地删除:

1
git branch -d new-feature

从远程删除:

1
git push origin --delete new-feature

补充:push时失误上传了大文件如何补救

在一次推送项目的时候忘记加入.gitignore 了,导致我的png数据集全部被列入了推送list,好多个G,严重影响了我的上传速度。这里介绍:在git push 后如何终止并重新上传。

  1. 首先使用 ctrl+C 停止当前的进度。

  2. 从Git中移除所有文件:git rm -r --cached .

  3. 重新添加所有文件git add .

  4. 提交git commit -m "Add .gitignore"

  5. 推送到Githubgit 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
2
3
4
5
6
7
8
9
# 初始化项目,在项目根目录下(若一开始准备用github,创建仓库后也有对应教程)
git init

# 工作区 -> 暂存区
git add [filename]
# 暂存区 -> 本地版本库
git commit -m "XXXXX"
# 推送到远程仓库
git push

从远程仓库到本地版本库:

1
2
3
4
git pull origin branch-name
# 或者
git fetch origin branch-name
git merge 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)
作者

Zhou

发布于

2023-07-23

更新于

2026-07-05

许可协议

评论

+ + +