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 解决权限问题
相关推荐
麦兜*1 小时前
Spring Boot 整合量子密钥分发(QKD)实验方案
java·jvm·spring boot·后端·spring·spring cloud·maven
崎岖Qiu2 小时前
【JVM篇13】:兼顾吞吐量和低停顿的G1垃圾回收器
java·jvm·后端·面试
一只叫煤球的猫5 小时前
被架构师怼了三次,小明终于懂了接口幂等设计
后端·spring·性能优化
鹦鹉0076 小时前
IO流中的字节流
java·开发语言·后端
AntBlack7 小时前
闲谈 :AI 生成视频哪家强 ,掘友们有没有推荐的工具?
前端·后端·aigc
Livingbody8 小时前
使用gradio构建一个大模型多轮对话WEB应用
后端
泉城老铁10 小时前
Spring Boot 对接阿里云 OSS 的详细步骤和流程
java·后端·程序员
Aurora_NeAr10 小时前
大数据之路:阿里巴巴大数据实践——元数据与计算管理
大数据·后端
喜欢板砖的牛马10 小时前
容器(docker container):你需要知道的一切
后端·docker
lichenyang45310 小时前
从零开始学Express,理解服务器,路由于中间件
后端