GIT:如何从零开始初始化并提交一个本地仓库到远程仓库


如何从零开始初始化并提交一个本地仓库到远程

最近我在处理一个新项目(暂且叫它 ProjectX)时,遇到了一个常见的 Git 工作流问题。整个过程让我重新梳理了一遍从本地初始化仓库到成功推送到远程仓库的步骤。以下是我的记录,希望对遇到类似问题的朋友有所帮助。

第一步:初始化本地仓库

一切从零开始。我首先在 ProjectX 的文件夹中打开终端,输入以下命令来初始化一个 Git 仓库:

bash 复制代码
git init

这会在目录下生成一个隐藏的 .git 文件夹,表示这是一个 Git 管理的仓库。

第二步:添加文件

接下来,我需要把项目中的所有文件添加到 Git 的暂存区。我使用了:

bash 复制代码
git add .

这个命令会把当前目录下所有改动(包括新文件和修改过的文件)加入暂存区,准备提交。

第三步:提交更改

添加完文件后,我需要对这些更改进行一次本地提交,给它一个简单的描述:

bash 复制代码
git commit -m "Initial commit"

到这一步,本地仓库已经记录了我的第一次提交,但它还没有和任何远程仓库关联。

第四步:创建远程仓库并关联

由于本地仓库是孤立的,我需要在 GitHub 上创建一个远程仓库。登录 GitHub 后,我点击"New Repository",给它取了个名字(比如 RepoX),然后创建了一个空仓库。创建完成后,GitHub 提供了一个 .git 地址,比如:

arduino 复制代码
https://github.com/username/RepoX.git

回到本地,我需要将这个远程地址与本地仓库关联起来,命令如下:

bash 复制代码
git remote add origin https://github.com/username/RepoX.git

这里的 origin 是远程仓库的别名,习惯上都这么叫。

第五步:分支不匹配的问题

关联完成后,我尝试将本地提交推送到远程:

bash 复制代码
git push origin master

结果却报错了!仔细一看,问题出在分支名称上。本地的默认分支是 master,而 GitHub 新建的仓库默认分支是 main。这导致推送失败。

为了解决这个问题,我需要将本地分支与远程分支对齐。有两种选择:要么把本地 master 推送到远程 main,要么直接把本地分支改成 main。我选择了后者,因为 GitHub 现在默认使用 main。于是我执行了以下步骤:

  1. 重命名本地分支:

    bash 复制代码
    git branch -m master main
  2. 再次推送:

    bash 复制代码
    git push origin main

这次推送成功了!远程仓库里终于出现了我的代码。

第六步:权限问题(可能遇到的情况)

值得一提的是,这次推送没遇到权限问题,可能是因为我之前已经在本地配置过 GitHub 的凭据。但如果你是第一次推送,可能会遇到认证失败的情况。GitHub 现在默认使用个人访问令牌(Personal Access Token,简称 PAT)而不是密码。

配置方法是这样的:

  1. 在 GitHub 上生成一个 PAT:进入"Settings > Developer settings > Personal access tokens",生成一个新令牌,勾选 repo 权限。

  2. 本地推送时,系统会提示输入用户名和密码。用户名是你的 GitHub 用户名,密码则输入刚刚生成的 PAT。

  3. 或者直接在本地全局配置:

    bash 复制代码
    git config --global credential.helper store

    这样下次推送时,Git 会记住你的凭据。

总结

从初始化本地仓库到成功推送到远程,整个过程并不复杂,但分支名称不一致和权限配置可能是新手容易踩的坑。以下是我的完整步骤总结:

  1. git init
  2. git add .
  3. git commit -m "Initial commit"
  4. 在 GitHub 创建仓库,复制 .git 地址
  5. git remote add origin <远程地址>
  6. 检查分支名,如有必要用 git branch -m 重命名
  7. git push origin main
  8. 如果需要,配置 PAT 解决权限问题
相关推荐
明月_清风19 小时前
加密解密系统完全指南:原理剖析与 Go 实践
后端
小江的记录本20 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
冬奇Lab21 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
ServBay1 天前
月之暗面 Kimi Code 0.4.0 发布,终端 AI 编码助手全面采用 TypeScript,实现毫秒级启动
后端·aigc·ai编程
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾回收算法:标记-清除、标记-复制、标记-整理、分代收集(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·安全·面试
小江的记录本1 天前
【JVM虚拟机】垃圾回收GC:垃圾收集器:G1:Region分区、Mixed GC、回收流程、适用场景(高频)(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·spring cloud·面试
欧雷殿1 天前
从「吸引子引导工程」看我的「一人公司」实践
前端·人工智能·后端
卷无止境1 天前
用一个电影院售票厅,把 SimPy 的条件事件讲透
后端
日月云棠1 天前
9 Double 与 Float —— IEEE 754 浮点数在 Java 中的实现
java·后端