news 2026/9/19 8:49:17

Git入门实战:从安装配置到首次提交与远程仓库

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git入门实战:从安装配置到首次提交与远程仓库

1. 环境准备:先把Git装好再谈其他

不管你是刚入行的前端新人,还是写了几年业务代码的老兵,换台新电脑或者刚接手一台公司分配的机器,第一件事往往不是装IDE,而是把Git环境拉起来。这个工具现在已经是开发者的基础设施,没有它,代码协作基本寸步难行。

1.1 不同系统下的Git安装方式

Windows用户建议直接去官网下载安装包,一路默认配置点到底就行。安装过程中有几个选项值得留意:组件选择默认即可,但“默认编辑器”别选Vim,如果你不熟悉Vim的操作方式,后续写提交信息时会非常难受,我一般选Visual Studio Code或Notepad++。

macOS用户就比较省事了,只要机器上装了Homebrew,一条命令搞定:

brew install git

不过这里有个细节:macOS自带的Git(通过git --version能查到的系统自带版本)通常比较老,虽然能用,但某些新版Git的功能和bug修复是没有的。所以强烈建议统一用Homebrew安装的版本,安装完成后可以执行which git确认当前指向的是/usr/local/bin/git而不是/usr/bin/git

Linux发行版各自有包管理器,Ubuntu和Debian系用:

sudo apt update sudo apt install git

CentOS或Fedora这类RHEL系则用:

sudo yum install git

1.2 用终端还是图形客户端

很多新手一上来就装Git小乌龟(TortoiseGit)或者IDE内置的Git面板,觉得有界面方便。这个选择我不反对,图形界面确实是很好的辅助工具,但强烈建议至少把终端里的Git命令练熟——因为有时候你拿不到图形界面的操作权限,或者服务器上只有终端环境,这时候只能靠命令。

而且说实话,终端命令并没有想象中难记。常用的来来去去就那么十条:statusaddcommitpushpullclonebranchcheckoutmergelog。今天就先把这些基本功练扎实。

1.3 安装完成的验证方式

装完之后不要急着去配置,先验证一下环境变量是否生效。打开终端(Windows可以按Win+R输入cmd,或者直接用PowerShell),执行:

git --version

如果输出类似于git version 2.40.1.windows.1的内容,说明安装成功了。有时候会遇到“git不是内部或外部命令”的报错,这种情况90%是环境变量没配好,但Windows的Git安装包一般会自动写入环境变量,极少出现这种问题。真遇到了,去“系统属性-环境变量-Path”里检查一下有没有Git的bin目录路径。

2. 全局配置:这一步藏着最多人忽略的坑

Git安装好之后不能直接干活,得先告诉它“你是谁”。这一步很多人会跳过,或者随便写一个名字和邮箱。我当时刚接触Git的时候也觉得这玩意儿无所谓,后来给开源项目提Pull Request时才意识到:提交作者信息写错了,改起来麻烦得要命。

2.1 user.name和user.email到底影响什么

每次执行git commit时,Git会把当前配置的用户名和邮箱作为作者信息写入这次提交记录。这些信息会永久留在提交历史里,会显示在Gitee或GitHub的提交列表上。如果提交信息不正确,哪怕代码写得再漂亮,别人也不知道这个提交到底是谁做的。

配置命令相当简单:

git config --global user.name "你的名字" git config --global user.email "你的邮箱"

这里有一个容易踩的细节:注册代码托管平台时用的邮箱和Git配置的邮箱最好保持一致。如果你在Gitee上绑定的邮箱是A,但Git里配置的邮箱是B,提交记录不会被关联到你的账号上——提交头像不会显示,贡献度也不会被统计。别问我怎么知道的,都是泪。

2.2 除了身份信息,这三个全局参数也建议一起配好

第一个是默认分支名。老版本Git创建仓库时默认分支叫master,但新的Git版本已经开始默认使用main作为初始分支。为了统一,建议显式指定:

git config --global init.defaultBranch main

第二个是换行符处理。Windows和Linux/macOS的换行符不同,Windows用CRLF,Linux/macOS用LF。如果不做处理,在文件被多次跨平台修改后,Git会疯狂提示“LF will be replaced by CRLF”之类的警告,严重的还会导致整个文件被判定为改动。Windows用户建议设置:

git config --global core.autocrlf true

macOS/Linux用户则设置:

git config --global core.autocrlf input

第三个是提交信息编辑器。前面提到了,如果你不想每次提交信息时陷入Vim无法退出的窘境,就换掉它:

git config --global core.editor "code --wait"

2.3 检查配置是否生效

配置完可以用这条命令查看全部内容:

git config --list

如果内容太多,也可以只看某个单独项:

git config --global user.name

配置是分层的,--global写入的是当前用户的全局配置,存在用户主目录下的.gitconfig文件里;还有一种--local配置只对当前仓库生效。如果全局配置和仓库配置冲突时,仓库配置优先。

3. 初始化本地仓库并完成首次提交

配置好了身份信息,接下来就进入正题了:怎么把本地一个普通文件夹变成一个Git仓库。

3.1 目录结构设计和git init的正确姿势

在实际开发中,很少有人会对整个磁盘根目录执行git init,通常是为项目单独建一个文件夹,然后在这个项目根目录下初始化仓库。我见过不少新手把git init执行在C:\Users\用户名这种目录下,结果后续操作全是“Not a git repository”或者把一堆无关文件都纳入了版本控制。

正确的做法是:

mkdir my-project cd my-project git init

执行后Git会返回Initialized empty Git repository in ...,此时这个目录就已经是仓库了。这里顺带解释一下git init背后做了什么:它在当前目录下创建了一个隐藏的.git文件夹,这个文件夹里存放着Git所需要的全部元数据——对象数据库、引用、配置、钩子脚本等。不要动这个文件夹里的东西,否则仓库就废了。

3.2 理解工作区、暂存区和版本库

初学Git最容易卡住的就是这三个概念。我先用大白话解释一遍:

  • 工作区:就是你电脑上实际看到的文件目录,你在这里写了代码、改了文件。
  • 暂存区:一个中间缓冲区,用git add把工作区的改动放进去。
  • 版本库:最终提交后,文件会生成一个不可变的版本快照,存在这里。

打个比方,暂存区就像超市购物车。你在货架上(工作区)逛,把想买的东西(改动文件)放进购物车(暂存区),最后去收银台结账(执行git commit),结账完这单交易才算正式产生。

3.3 首次提交:从创建一个README开始

我习惯初次提交只做一件事——创建一个README文件并提交。这样后续的提交历史从第一条开始就是清晰的。

echo "# 我的第一个Git项目" >> README.md git add README.md git commit -m "Initial commit: 添加项目说明文件"

这里解释一下git addgit commit的分工:git add把README.md从工作区添加到暂存区,git commit把暂存区的内容永久的写入版本库,生成一个提交对象。如果你修改了多个文件但只想提交部分文件,完全可以只add其中几个,这给了开发者在提交前精准选择改动内容的自由度。

commit之后,用git status查看,会显示工作区“clean”,说明当前没有待提交的改动。再用git log --oneline能看到刚创建的提交记录。

3.4 提交信息怎么写才专业

提交信息是别人了解你这次改动的重要途径。我见过太多“update”“修改”“test”这种毫无信息量的提交信息,事后回查代码时完全想不起来当时干了啥。

一份合格的提交信息通常包含:类型前缀(feat表示新功能、fix表示修bug、docs表示文档改动、refactor表示重构)、简要描述改动内容、如果有必要还可以在正文里写详细说明。例如:

git commit -m "fix: 修复登录接口在高并发下返回500的问题"

如果一次提交后发觉信息写错了,趁没推到远程仓库之前可以直接修改:

git commit --amend

这个命令会把当前的改动合并到上一次提交中,并重新编辑提交信息。但要注意:如果这个提交已经推到远程,并且有多人协作拉取过,不要用amend,否则会造成历史分叉,让同事很难受。

4. 关联远程仓库:Gitee/GitHub从新建到push

本地仓库建好只是第一步,真正让代码“活”起来的是把它推到远程仓库。这一步不少新手会卡住,尤其是SSH密钥配置那一块。

4.1 在托管平台新建远程仓库

以Gitee或GitHub为例,登录后在页面右上角找到“新建仓库”,填一个名称,选择公开或私有,建议同时勾选“初始化仓库”时创建一个README——但如果你本地已经建好了仓库,就不要勾选,否则后面push时会遇到远程和本地内容不相关导致的冲突。

命名建议和本地项目文件夹保持一致,比如本地叫my-project,远程仓库也叫my-project,这样团队合作时不用猜来猜去。

4.2 选择HTTPS还是SSH

这是一个绕不开的选择。HTTPS方式简单直观,push时输入账号密码(或者令牌)就能用,适合偶尔操作的个人项目。SSH方式需要在本地生成密钥,然后把公钥配置到托管平台,后续操作免输入账号密码,更安全,适合长期维护的项目。

学校或公司的内部GitLab一般两种方式都支持,但生产环境我更推荐SSH。理由有以下几点:不用每次输入密码;密钥对安全性更高;即使密码泄露,别人也无法直接凭借密码push代码——前提是平台开启了SSH访问。

4.3 SSH密钥生成与配置全流程

生成密钥的命令不复杂:

ssh-keygen -t ed25519 -C "你的邮箱"

一路回车即可。它在~/.ssh目录下生成两个文件:id_ed25519是私钥,绝对不要泄露给别人;id_ed25519.pub是公钥,需要填到托管平台上。

cat ~/.ssh/id_ed25519.pub查看公钥内容,复制整段内容,到Gitee或GitHub的“设置-SSH公钥”页面粘贴保存。

有些老教程还会推荐-t rsa -b 4096参数,但ed25519算法更安全更快,新项目建议用这个。如果是公司内部的老旧Git服务器,可能存在不支持ed25519的情况,那时候再用rsa也不迟。

测试是否配置成功:

ssh -T git@gitee.com

如果返回欢迎信息,说明SSH链路已经通了。

4.4 添加远程仓库并推送代码

回到本地仓库目录,执行:

git remote add origin git@gitee.com:用户名/my-project.git

这里的origin是远程仓库的别名,是业界约定俗成的默认名称,也可以叫别的名字,但没必要特立独行。git remote add不会真正连接远程,只是做了个本地映射。

接着把本地代码推到远程:

git push -u origin main

-u参数的意思是“设置上游分支”,它会将本地的main分支与远程的main分支建立关联。以后在当前分支下,直接执行git pushgit pull就能推拉代码,不用再写完整命令。

4.5 远程关联的验证与常见提醒

推送成功后,拷到浏览器打开远程仓库页面,就能看到代码已经上去了。可以用git remote -v查看当前关联了哪些远程地址,还能顺便检查有没有拼错仓库路径。

有一点想提醒:首次push时需要确认远程仓库是空的。如果远程已经存在了文件(比如平台自动生成的README),本地推送就会被拒绝,提示类似“failed to push some refs”。这时候要么先git pull origin main --rebase拉取远端内容合并,要么把远程仓库删了重建——选择哪种方式,取决于你本地代码是否还有保留价值。

5. 常用问题排查与提效技巧

5.1 高频报错与解决方法速查

报错信息原因解决方法
fatal: Not a git repository当前目录不是Git仓库或不在仓库子目录执行git initcd到仓库根目录
fatal: remote origin already exists已经关联过远程仓库git remote set-url origin 新地址或先git remote remove origin
Permission denied (publickey)SSH公钥未配置或不对检查~/.ssh下的公钥是否已添加到平台
fatal: refusing to merge unrelated histories本地和远程仓库存在两套独立历史git pull origin main --allow-unrelated-histories
LF will be replaced by CRLF跨平台换行符分歧按上文设置core.autocrlf
Updates were rejected because the remote contains work远程有本地没有的提交git pull --rebase合并再push

最后一条“Updates were rejected”出现频率尤其高,很多新手第一反应是强推:git push -f。这个操作我极其不建议,尤其是在共享分支上,强推会覆盖别人的提交记录,影响很恶劣。正确方式是先拉取远程的更新,解决冲突后再推送。

5.2 让日常操作效率翻倍的小技巧

git status虽然是使用频率最高的命令,但每次输入都比较费手指,可以设置一个简短的别名:

git config --global alias.st status git config --global alias.co checkout git config --global alias.br branch git config --global alias.ci commit

设置之后,git st就能替代git status

另一个很实用的是.gitignore文件。建仓库之初就应当加上,把系统文件、依赖目录、编译产物、敏感配置排除在版本控制之外。比如Node.js项目通常要忽略node_modules,Python项目要忽略__pycache__.venv。一个简单的node_modules/写在文件里,就能让本地状态干净好多。

5.3 分支创建与提交规范的心态建设

提到分支,很多初学者会觉得复杂:“我是不是要等熟练了再用分支?”其实恰恰相反,正是因为是新手,才要更早养成用分支的习惯。

工作流不需要一开始追求复杂的Git Flow模型,先掌握最简单的特性分支就行:

git checkout -b feature/login # 在分支上开发并提交 git push -u origin feature/login

这个操作相当于给代码工作开了一条新的时间线,主分支main保持稳定可用,功能分支合并之前可以放心大胆地改。等代码测完没问题了,再合并回主分支。哪怕出错也只需要处理分支上的问题,不会影响主干。

5.4 还有一些容易被忽略的好用命令

如果一个文件被误删了,但之前已经提交过版本,用git checkout -- 文件名可以恢复(新版本也可以用git restore)。如果误提交了一次改动,想撤销本次提交但保留文件内容,使用git reset --soft HEAD~1

查看某行代码是谁在什么时候写的,最优雅的方式是:

git blame 文件名

这在排查问题、向同事请教某段代码时特别好用,能精准定位到提交人而不需要到处问。

这些命令都不难,真正难的是养成“频繁提交、每个提交只做一件事”的习惯。我个人的体感是:提交粒度越细,日后定位问题越省力,回退代码的操作也越安全。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 8:48:26

Unity数字孪生实战:PiXYZ工业CAD模型轻量化与优化全攻略

工业数字孪生项目里,模型处理往往是第一个卡脖子的环节。你拿到甲方给的原始CAD数据,动辄几百兆甚至几个G,图层混乱、面数爆炸、材质丢失,直接拖进Unity轻则卡死,重则导入报错。我做过好几个工厂产线、制冷站、变电站的…

作者头像 李华
网站建设 2026/9/19 8:41:58

OpenVINS从零搭建到RGB-D实时建图:VIO原理、标定与避坑实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 8:41:52

Codex不是模型而是API协议:本地部署的真相与工程实践

1. Codex不是模型,是接口协议——先破除三个最普遍的认知误区很多人点开“Codex下载与本地部署”这个标题时,第一反应是:这又是一个类似Ollama、LM Studio那样的大模型运行工具?点进去才发现官网打不开、GitHub仓库找不到、pip in…

作者头像 李华
网站建设 2026/9/19 8:40:26

支付网关合规改造:Java + AES + 二要素认证即时版实战

1. 支付网关合规改造的起点与整体思路1.1 为什么支付网关绕不开实名认证这道坎做支付网关的兄弟都清楚,资金流转的每一个环节都绑着一条硬性要求:你得知道钱从谁手里来、到谁手里去。这不是可选项,是业务能不能上线的前置条件。我接手过几个企…

作者头像 李华
网站建设 2026/9/19 8:39:07

从零实现U-Net:PyTorch逐层维度追踪与跳跃连接详解

U-Net 这个网络结构,我最早是在做医学影像分割的项目里接触到的。当时用现成的分割库跑通不难,但一旦要改结构、换损失函数、或者排查维度对不上的报错,就发现如果不亲手把每一层的张量形状推一遍,根本没法定位问题。后来我干脆找…

作者头像 李华