基本概念
GitHub是全球最大的开源代码托管平台,适合国际协作
Gitee是国内版的代码托管平台,访问速度快,更适合中国开发者
-
分布式特性 ------ 每个克隆的仓库都是完整的版本库,没有主次之分
-
作用 ------ 实现多机协作、备份和代码共享,解决集中式系统单点故障问题
-
对比
特性 Git SVN 架构 分布式(每台机器有完整仓库) 集中式(依赖中央服务器) 离线操作 支持完整功能 仅部分功能可用 分支/合并 轻量级且高效 较慢且复杂 容灾能力 任意副本可恢复 依赖服务器备份 -
注意
- 隐私保护 :
GitHub公开仓库对所有人可见,敏感项目需升级为私有或自建Git服务器 - 多设备管理 :通过添加多个
SSH Key,实现多电脑访问同一仓库
- 隐私保护 :
指令介绍
管理远程仓库 git remote
-
语法
shgit remote [<subcommand>] [<options>] [<arguments>]子命令 subcommand功能描述 语法示例 add添加远程仓库 git remote add <名称> <URL>rename重命名远程仓库 git remote rename <旧名> <新名>remove/rm删除远程仓库 git remote remove <名称>set-url修改远程仓库 URLgit remote set-url <名称> <新URL>show显示远程仓库详情 git remote show <名称>prune清理已删除的远程分支 git remote prune <名称>get-url获取远程仓库 URLgit remote get-url <名称>选项 options功能描述 语法示例 -v/--verbose显示详细信息(包含URL) git remote -v-h/--help查看帮助文档 git remote -h -
具体示例
-
查看远程仓库
sh$ git remote # 显示简略信息 originsh$ git remote -v # 显示详细信息 origin git@github.com:user/repo.git (fetch) # fetch - 拉取数据的地址 origin git@github.com:user/repo.git (push) # push - 推送数据的地址(可能与 fetch 不同) -
添加远程仓库
sh# 添加一个新的远程仓库,自定义远程仓库简称为 upstream,远程仓库的SSH/HTTPS地址为 git@github.com:... $ git remote add upstream git@github.com:otheruser/repo.git -
重命名远程仓库
sh$ git remote rename origin github # 重命名远程仓库,由 origin 更名为 github -
删除远程仓库
sh$ git remote remove upstream # 删除远程仓库 upstream -
查看远程仓库详情
SH# 显示 origin 远程的详细信息,包括远程分支、本地跟踪关系等 $ git remote show origin * remote origin Fetch URL: git@github.com:user/repo.git Push URL: git@github.com:user/repo.git HEAD branch: main Remote branches: main tracked dev tracked Local branch configured for 'git pull': main merges with remote main Local ref configured for 'git push': main pushes to main (up to date)
-
推送代码 git push
-
语法
shgit push [<options>] [<remote>] [<local-branch>[:<remote-branch>]]-
远程仓库名
remote------ 通常是origin(默认远程仓库名称) -
本地分支名
local-branch------ 要推送的本地分支(如main、master、feature) -
远程分支名
remote-branch------ 远程仓库的目标分支(默认与本地分支同名) -
选项
options选项 功能 使用场景 -u/--set-upstream设置默认上游分支 首次推送建立追踪关系 -f/--force强制覆盖远程分支 变基、修改历史后推送 --force-with-lease带检查的强制推送 更安全的强制推送 --tags推送所有标签 分享版本标签 --delete删除远程分支 清理远程分支 --all推送所有分支 批量推送本地分支
-
-
具体示例
-
首次推送到远程仓库
sh# 1.先关联远程仓库 $ git remote add origin git@github.com:username/repo.git # 2.首次推送(使用选项 -u 设置默认上游分支) $ git push -u origin main -
日常推送(即已有远程仓库关联)
sh# 1.先添加并提交修改 $ git add . $ git commit -m "Update README" # 2.日常推送(显式指定远程仓库、分支)(由于已设置-u,可简写) $ git push origin main -
推送到不同分支
sh# 推送本地 dev 分支到远程 dev 分支 $ git push origin devsh# 推送本地 dev 分支到远程 new-dev 分支 $ git push origin dev:new-dev -
强制推送到远程仓库
sh# 强制覆盖远程分支(适用于变基后推送) $ git push --force origin mainsh# 更安全的强制推送(避免覆盖他人提交) $ git push --force-with-lease
-
-
常见问题
-
命令行报错:
! [rejected] main -> main (non-fast-forward)-
原因 ------ 远程分支有本地没有的新提交(如其他人推送了代码)
-
解决
sh# 1.先拉取远程更改并合并 $ git pull origin main # 2.再推送 $ git push origin main
-
-
命令行报错:
Permission denied (publickey)-
原因 ------
SSH密钥未正确配置 -
解决
sh# 1.检查 SSH 密钥是否添加到 GitHub/GitLab $ ssh -T git@github.com # 2.如果未配置,重新生成 SSH Key $ ssh-keygen -t ed25519 -C "your_email@example.com"
-
-
克隆远程仓库 git clone
-
语法
shgit clone [remote-path] [local-path]- 远程仓库地址
remote-path------ 支持SSH或HTTPS协议 - 本地目录名
local-path------ 自定义本地文件夹名称,默认使用仓库名(可选)
- 远程仓库地址
-
具体示例
-
通过
SSH克隆 ------ 自动创建user/repo目录,每次克隆无需每次推送输入密码sh$ git clone git@github.com:user/repo.git -
通过
HTTPS克隆 ------ 每次推送需输入GitHub账号密码sh$ git clone https://github.com/user/repo.git -
克隆到自定义目录
E:\projectsh$ git clone git@github.com:user/repo.git E:\project -
克隆指定分支
devsh$ git clone --branch dev git@github.com:user/repo.git
-
配置远程库连接
本地仓库上传代码到
GitHub时,GitHub只要知道SHH公钥,就可以确认是本人推送,而不是冒充
本地操作
-
创建
SSH Key------ 若用户主目录(C:\Users\用户名)下无.ssh目录,或.ssh目录下无id_rsa和id_rsa.pub文件,则输入命令进行创建:shssh-keygen -t rsa -C "youremail@example.com"id_rsa是私钥,不能泄露id_rsa.pub是公钥,可以放心告诉任何人 -
复制
id_rsa.pub内容
GitHub 远程操作
- 设置
SHH------ 登录GitHub,打开Setting -> SHH and GPG keys,设置SSH

Gitee 远程操作
- 设置
SHH------ 登录Gitee,打开菜单 -> 设置 -> SSH公钥,填写标题,设置SSH(粘贴.ssh/id_rsa.pub文件内容)

添加远程库
GitHub 远程操作
- 创建远程库 ------
Create new repo→ 命名(如learngit)→ 保持默认设置创建
Gitee 远程操作
-
创建远程库 ------ 右上角用户头像 → 新建仓库 → 填写仓库信息
注意:远程仓库项目名称最好与本地一致

本地操作 --- 关联单个远程
-
关联远程库
sh$ git remote add origin git@github.com:yourname/gitname.git 或 $ git remote add origin git@gitee.com:yourname/gitname.git -
首次推送
sh$ git push -u origin master Counting objects: 20, done. Delta compression using up to 4 threads. Compressing objects: 100% (15/15), done. Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done. Total 20 (delta 5), reused 0 (delta 0) remote: Resolving deltas: 100% (5/5), done. To github.com:yourname/gitname.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.输出解释
sh# 计数对象 Counting objects: 20, done. # 统计需要推送的对象数量,共20个(包含提交、文件等) # 压缩处理 Delta compression using up to 4 threads. # 使用4个线程进行增量压缩(只存储变化部分) Compressing objects: 100% (15/15), done. # 15/15个对象需要压缩,已完成100% # 写入对象 Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done. # 写入20个对象到远程仓库 # 统计信息 Total 20 (delta 5), reused 0 (delta 0) # [delta 5] 5个增量(差异数据);[reused 0] 没有重用之前的对象 # 远程处理 remote: Resolving deltas: 100% (5/5), done. # 远程仓库正在解压和处理这些增量数据,完成100% # 推送结果 To github.com:yourname/gitname.git # 推送到 GitHub 的 yourname/gitname 仓库 * [new branch] master -> master # [new branch] --- 首次推送该分支到远程 # master -> master --- 本地master分支推送到远程master分支 # 上游追踪设置 Branch 'master' set up to track remote branch 'master' from 'origin'. # 由于使用了 -u 参数,Git 建立了追踪关系,以后: # 可以直接用 git push 推送 # 可以用 git pull 拉取更新 # 可以用 git status 查看本地与远程的差异 -
后续推送
sh$ git push origin master
本地操作 --- 关联多个远程
一个本地库可以同时关联
GitHub和Gitee但要注意,
Git给远程库的默认名称是origin,如果有多个远程库,需要用不同的名称来标识
-
关联远程库
shell$ git remote add github git@github.com:yourname/gitname.git $ git remote add gitee git@gitee.com:yourname/gitname.git注意上面,使用
github和gitee代替了origin,避免冲突 -
查看远程库信息
shell$ git remote -v gitee git@gitee.com:yourname/gitname.git (fetch) gitee git@gitee.com:yourname/gitname.git (push) github git@github.com:yourname/gitname.git (fetch) github git@github.com:yourname/gitname.git (push) -
推送
-
推送到
GitHub:git push github master -
推送到
Gitee:git push gitee master
-
删除远程库
本地操作
-
查看远程库信息
sh$ git remote -v origin git@github.com:yourname/gitname.git (fetch) origin git@github.com:yourname/gitname.git (push) -
根据名字删除
sh$ git remote rm origin此处"删除"是解除本地和远程的绑定关系,并不是物理上删除远程库。远程库本身并没有任何改动。
远程操作
- 登录
GitHub,在后台页面找到删除按钮删除
克隆远程库
远程操作
- 登陆
GitHub,创建仓库gitname - 勾选
Initialize this repository with a README,自动创建README.md文件
本地操作
-
克隆远程库到本地库
sh$ git clone git@github.com:yourname/gitname.git Cloning into 'gitname'... remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3 Receiving objects: 100% (3/3), done.