Git | 远程仓库操作

基本概念

GitHub 是全球最大的开源代码托管平台,适合国际协作
Gitee 是国内版的代码托管平台,访问速度快,更适合中国开发者

  • 分布式特性 ------ 每个克隆的仓库都是完整的版本库,没有主次之分

  • 作用 ------ 实现多机协作、备份和代码共享,解决集中式系统单点故障问题

  • 对比

    特性 Git SVN
    架构 分布式(每台机器有完整仓库) 集中式(依赖中央服务器)
    离线操作 支持完整功能 仅部分功能可用
    分支/合并 轻量级且高效 较慢且复杂
    容灾能力 任意副本可恢复 依赖服务器备份
  • 注意

    • 隐私保护GitHub 公开仓库对所有人可见,敏感项目需升级为私有或自建Git服务器
    • 多设备管理 :通过添加多个 SSH Key ,实现多电脑访问同一仓库

指令介绍

管理远程仓库 git remote
  • 语法

    sh 复制代码
    git remote [<subcommand>] [<options>] [<arguments>]
    子命令 subcommand 功能描述 语法示例
    add 添加远程仓库 git remote add <名称> <URL>
    rename 重命名远程仓库 git remote rename <旧名> <新名>
    remove / rm 删除远程仓库 git remote remove <名称>
    set-url 修改远程仓库 URL git remote set-url <名称> <新URL>
    show 显示远程仓库详情 git remote show <名称>
    prune 清理已删除的远程分支 git remote prune <名称>
    get-url 获取远程仓库 URL git remote get-url <名称>
    选项 options 功能描述 语法示例
    -v / --verbose 显示详细信息(包含URL) git remote -v
    -h / --help 查看帮助文档 git remote -h
  • 具体示例

    • 查看远程仓库

      sh 复制代码
      $ git remote		# 显示简略信息
      origin
      sh 复制代码
      $ 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
  • 语法

    sh 复制代码
    git push [<options>] [<remote>] [<local-branch>[:<remote-branch>]]
    • 远程仓库名 remote ------ 通常是 origin(默认远程仓库名称)

    • 本地分支名 local-branch ------ 要推送的本地分支(如 mainmasterfeature

    • 远程分支名 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 dev
      sh 复制代码
      # 推送本地 dev 分支到远程 new-dev 分支
      $ git push origin dev:new-dev
    • 强制推送到远程仓库

      sh 复制代码
      # 强制覆盖远程分支(适用于变基后推送)
      $ git push --force origin main
      sh 复制代码
      # 更安全的强制推送(避免覆盖他人提交)
      $ 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
  • 语法

    sh 复制代码
    git clone [remote-path] [local-path]
    • 远程仓库地址 remote-path ------ 支持 SSHHTTPS 协议
    • 本地目录名 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:\project

      sh 复制代码
      $ git clone git@github.com:user/repo.git E:\project
    • 克隆指定分支 dev

      sh 复制代码
      $ git clone --branch dev git@github.com:user/repo.git

配置远程库连接

本地仓库上传代码到 GitHub 时,GitHub 只要知道 SHH 公钥,就可以确认是本人推送,而不是冒充

本地操作
  • 创建 SSH Key ------ 若用户主目录(C:\Users\用户名)下无 .ssh 目录,或 .ssh 目录下无 id_rsaid_rsa.pub 文件,则输入命令进行创建:

    sh 复制代码
    ssh-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
本地操作 --- 关联多个远程

一个本地库可以同时关联 GitHubGitee

但要注意,Git 给远程库的默认名称是 origin ,如果有多个远程库,需要用不同的名称来标识

  • 关联远程库

    shell 复制代码
    $ git remote add github git@github.com:yourname/gitname.git
    $ git remote add gitee git@gitee.com:yourname/gitname.git

    注意上面,使用 githubgitee 代替了 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)
  • 推送

    • 推送到 GitHubgit push github master

    • 推送到 Giteegit 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.

相关推荐
NuageL2 小时前
第一次用Git协作流程记录和踩坑
git
Ankkaya3 小时前
cloudflare + github 实现留言板
前端·github
特级业务专家4 小时前
这下发布不需要Jenkins了
linux·git·docker
0和1的舞者5 小时前
Git 实战踩坑:如何让多个 IDE 项目共用一个远程仓库(附子模块问题解决)
git·开发·仓库·码云·子模块·操作·冲突
阿里嘎多学长5 小时前
2025-12-28 GitHub 热点项目精选
开发语言·程序员·github·代码托管
CoderJia程序员甲5 小时前
GitHub 热榜项目 - 日榜(2025-12-28)
ai·开源·大模型·github·ai教程
一条闲鱼_mytube6 小时前
Github+Jenkins + Harbor CI/CD 指南
ci/cd·github·jenkins
逛逛GitHub6 小时前
国产 OCR 开源神器官网上线了,相当给力。
github
妖孽白YoonA7 小时前
Git Worktree:同时处理多个分支的正确姿势
git