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 解决权限问题
相关推荐
Asthenia0412几秒前
Linux基础:文件/文件描述符/Socket/系统调用/网络通信/零拷贝
后端
Asthenia04126 分钟前
ByteBuf 在 Netty 中的外内存调优(MQ 项目场景)
后端
敖正炀42 分钟前
JVM字节码详解
后端
敖正炀1 小时前
JVM类文件结构
后端
敖正炀1 小时前
类加载过程
后端
Asthenia04121 小时前
面试复盘:Collections.synchronizedList的实现与同步策略分析
后端
Asthenia04121 小时前
面试复盘:CopyOnWriteArrayList的底层实现分析
后端
Asthenia04122 小时前
面试官问我:HashMap的扩容机制,我从jdk1.7和1.8两个版本来介绍
后端
计算机学姐2 小时前
基于SpringBoot的足球俱乐部管理系统
java·vue.js·spring boot·后端·mysql·java-ee·intellij-idea