我第一次真正上手用Git往GitCode上传代码时心里想的是这不就是把文件拖到网页里的事吗结果一打开终端就懵了git init、git add、git commit、git push每个单词单独看都认识连在一起就不知道先敲哪个。更折腾的是好不容易把命令敲完又碰上一个SSH认证失败硬是卡了我大半个晚上。后来回头看问题不在于Git有多难而在于当时的教程只让我“照着敲”从没解释过每一步到底在干什么。这篇文章我想用最简单的方式把“用Git上传代码到GitCode”这件事从头到尾拆开讲给你听。内容覆盖Git下载安装、本地仓库初始化、关联GitCode远程仓库、SSH密钥配置、完整push流程、分支合并以及几个高频报错的排查思路。凡是第一次接触Git的新手或者已经在用了但还没真正理顺流程的人读完应该都能自己跑通“本地修改 - 提交 - 推送到GitCode”的完整链路。1. Git和GitCode分别解决什么问题1.1 版本控制就是给代码做存档很多人不理解代码为什么要用一套专门的工具来管理。你可以把版本控制想象成游戏存档你打到一个重要关卡前先存个档手滑操作失误了、BOSS打不过去了随时可以从上一个存档点重新来。代码开发也一样你今天改了一版功能明天发现改坏了总不能靠人工复制粘贴来恢复。Git就是目前最流行的版本控制工具。它能在你的项目目录里记录每一次“存档”这个存档在Git里叫一次提交commit。每次提交都保存了当前所有文件的快照、提交人、提交时间和说明文字你想回到哪一次都能回去。更强大的是Git支持多人同时开发每个人在自己的分支上改动最后合并到一起互不干扰。1.2 Git负责本地GitCode负责云端这里有一个新手最容易混淆的点Git和GitCode不是同一个东西。Git是你电脑上安装的命令行工具它管的是你本地项目文件的历史版本所有操作都在你的机器上完成。而GitCode是一个代码托管平台用来存放你的远程仓库。你可以把它理解成一个云端保险柜你的代码通过Git推送到上面其他人也能从上面拉取代码。Git负责“怎么管版本”GitCode负责“把版本存到哪里”。两者配合起来才是完整的开发流程你在本地用Git提交代码然后把提交记录和文件一起推送到GitCode需要时再从GitCode拉取到另一台电脑上。1.3 这套组合的日常使用场景最简单的场景就是你单独开发一个项目需要在多台电脑之间同步代码或者想把代码备份到云端。你在公司电脑上改了一部分回家以后继续改只要有Git和GitCode两边一推一拉就能无缝衔接。更常见的场景是团队协作。你负责模块A同事负责模块B两个人各自在分支上开发互不影响。做完之后把分支推送到GitCode再发起合并请求由项目维护者审查代码后合并进主分支。GitCode承担的正是这个“多人协作的中转站”角色。2. 环境准备从下载安装到用户配置2.1 在Windows上安装Git的完整步骤如果你是Windows用户直接去Git官网下载对应系统的安装包就行下载下来的是一个exe文件。安装过程基本可以一路“Next”大部分选项用默认值就好。需要注意两个地方一是安装过程中会让你选编辑器默认的Vim对新手不友好建议选Notepad或者VS Code二是在安装结束前确保勾选了“Git Bash Here”这个右键菜单选项之后在任意文件夹里点右键就能直接打开Git的终端非常方便。安装完成后桌面或者开始菜单会出现Git Bash打开它输入下面的命令检查版本git --version如果能输出类似git version 2.x.x.windows.x这样的信息说明安装成功。Mac和Linux用户也可以用包管理器安装Mac上用brew install gitUbuntu上用apt install git这里就不再展开。2.2 首次使用前必须完成的两行配置Git在你每次提交代码时都会把提交人的名字和邮箱记录到历史里。如果不提前配置Git就会报错或者提示你补上。这两行配置是最基本、也是最重要的git config --global user.name 你的名字 git config --global user.email 你的邮箱注意这个邮箱建议和你注册GitCode用的邮箱保持一致这样提交记录才能和你GitCode账号关联起来。另外user.name不一定要真名可以是用户名或昵称但建议固定下来不要再改否则历史提交里会出现多个身份。配置完之后可以用下面的命令确认git config --global --list只要能看到user.name和user.email两行说明配置生效了。2.3 顺手做掉的额外设置还有两个设置我建议新手提前做好。一个是把默认分支名改成main避免本地用master、远程用main导致的混乱git config --global init.defaultBranch main另一个是Windows换行符处理。Windows和Linux系统的换行符不一样为了团队协作时不出现“整个文件都被判定为改动”的情况建议Windows用户设置git config --global core.autocrlf true这条配置的意思是提交时把Windows换行符转成Linux风格拉取时再转回来减少换行符带来的噪音。3. 在本地把一个项目变成Git仓库3.1 git init之后发生了什么假设你有一个项目文件夹里面放着代码现在要开始用Git管理它。第一步是进入这个文件夹打开Git Bash执行cd D:/我的项目 git init执行后Git会在当前文件夹里创建一个名为.git的隐藏目录。这个目录就是Git的“数据库”你的所有提交记录、分支信息、历史版本都存在这里。你可以进去看一眼但正常情况下不要手动修改里面的任何文件。从这一刻开始你的项目就成了一个Git仓库。如果你执行一下git statusGit会告诉你当前处于哪个分支以及哪些文件还没有被跟踪。3.2 add和commit的工作逻辑项目变成仓库之后下一步就是提交代码。很多新手会在这里卡住为什么不能直接一个命令提交非要先git add再git commit原因是Git把提交过程分成了两步它们之间隔了一个“暂存区”。你可以这样理解git add是把你想保存的东西放进购物车git commit才是真正结账付款生成小票。购物车的好处是你可以自由挑选比如你同时改了三个文件但只想提交其中两个那就只把这两个文件add进暂存区然后commit。实际操作如下git add index.html git add style.css git add . git commit -m 完成首页样式第一条和第二条分别添加特定文件第三条git add .表示把当前目录所有改动都添加进暂存区。我建议你刚开始用的时候多打几条明确的git add而不是一上来就无脑用git add .这样你更清楚自己提交了什么。commit的-m参数是提交说明这行文字会永久记录在历史里。说明要写清楚这次改了什么东西比如“修复登录按钮点击无效”就比“update”有价值得多。提交之后再看git status工作区就干净了用git log能看到提交记录。3.3 用.gitignore过滤无用文件你迟早会遇到一个问题项目里有些东西根本不需要提交比如Python的__pycache__目录、Java的target目录、前端的node_modules文件夹、IDE的.idea和.vscode配置、日志文件等等。这些文件要么是自动生成的要么是个人环境差异导致的推送到远程仓库只会制造混乱。解决办法是在项目根目录创建一个名为.gitignore的文件把要忽略的内容写进去node_modules/ target/ .idea/ .vscode/ *.log .DS_Store每行一条匹配规则支持通配符。创建好之后再执行git status就不会看到这些文件了。这个文件本身要提交到Git这样团队里所有人的忽略规则就统一了。4. 在GitCode上建立远程仓库并关联本地4.1 新建远程仓库时的关键选项本地仓库建好后还需要一个远程仓库来存放代码。登录GitCode官网注册并登录账号后进入创建仓库页面。这里需要填几个信息仓库名称推荐用小写英文字母和连字符例如my-first-project不要用中文和空格。仓库描述可选简单写一下项目是做什么的。可见性私有仓库只有你和被邀请的人能看公开仓库所有人都能看到自己学习练习刚开始用私有就好。初始化选项建议先不勾选自动生成README、.gitignore等文件。如果勾选了本地和远程仓库就会有两套互不相干的历史第一次推送时反而要被拒绝。后面我会专门讲这个坑。创建完成之后GitCode会展示一个仓库主页上面有远程仓库的HTTPS地址和SSH地址。这两个地址就是本地仓库和远程仓库之间的“门牌号”。4.2 用git remote关联远程地址回到本地项目目录执行下面的命令把远程地址和本地仓库关联起来git remote add origin https://gitcode.com/你的用户名/仓库名.git这条命令里的origin是远程仓库的别名你也可以叫别的名字但origin是全世界的Git用户约定俗成的叫法。添加之后可以用下面命令查看是否关联成功git remote -v看到origin对应两行地址fetch和push说明关联完成。如果中途填错了地址可以用git remote remove origin删掉重新添加不改远程地址也可以直接编辑本地配置但对新手来说remove再add是最直观的。4.3 HTTPS和SSH怎么选GitCode支持两种远程连接方式HTTPS和SSH。新手容易在两者之间纠结我这里直接给结论对比项HTTPSSSH首次使用需要输入GitCode用户名和密码有时还需要使用访问令牌需要配置一次SSH密钥日常使用每次push/pull都可能要求输入凭据配置后全程免密适用范围临时用一下、公共电脑自己的主力开发环境安全程度凭据容易忘记更新私钥在本地更安全用HTTPS第一次推送时如果提示密码错误通常是因为平台要求使用“访问令牌Personal Access Token”而不是登录密码。你需要到GitCode的设置或安全设置里生成一个个人访问令牌复制下来在Git提示输入密码时粘贴进去。这个令牌相当于有特定权限的临时密码使用之后要保存好。但如果你已经决定长期使用GitCode我更推荐直接上SSH省得每次都要处理密码问题。接下来的第5节就是完整的SSH配置流程。5. SSH密钥配置从此告别账号密码5.1 为什么SSH值得花这个时间SSH是一种安全连接协议它靠一对密钥来验证身份一把私钥存放在你电脑本地另一把公钥配置到GitCode账号上。推送代码时Git会用你的私钥签名服务器用你留下的公钥验签两边对上就放行。整个过程不需要输入账号密码。你只需要花一次时间生成密钥、上传公钥之后无论push、pull还是fetch都是全免密状态。而且在多台电脑之间切换也方便每台电脑生成各自的密钥分别加到GitCode账号里就行。5.2 一步步生成SSH密钥在Git Bash里依次执行下面的命令。先检查一下是否已经有密钥ls ~/.ssh/id_ed25519.pub如果提示文件不存在说明你还没有密钥需要先生成。推荐用Ed25519算法比传统RSA更安全且生成更快ssh-keygen -t ed25519 -C 你的邮箱执行之后会提示你选择保存路径直接回车用默认路径就行。接下来会提示输入passphrase口令短语这一步可以留空直接按两次回车。但如果你是在公司电脑上使用我建议设置一个口令这样即使别人拿到你的私钥文件也无法直接用。生成成功后执行cat ~/.ssh/id_ed25519.pub屏幕上会输出一串以ssh-ed25519开头的长文本这就是你的公钥。从开头一直复制到结尾注意不要多复制空格和换行。5.3 把公钥加进GitCode并验证连通性登录GitCode进入个人设置找到“SSH公钥”或类似入口通常在安全设置里。把你复制的公钥粘贴进去起个标题比如“工作电脑”或“家用台式机”然后保存。接下来验证是否配置成功。在终端执行ssh -T gitgitcode.com这里的域名要以GitCode官方文档为准。首次执行时SSH会提示确认主机的指纹输入yes回车即可。如果看到类似“Hi 用户名! Youve successfully authenticated”的信息说明SSH密钥已经生效。同时记得把远程仓库地址从HTTPS换成SSH格式git remote set-url origin gitgitcode.com:你的用户名/仓库名.git之后再push和pull就完全不用输入密码了。6. 手把手跑完一次完整上传6.1 从空项目到首次push的完整命令现在一切就绪我们从头到尾走一遍上传流程。假设你有一个项目文件夹里面已经有代码了且没有初始化过仓库。完整的命令序列如下cd D:/我的项目 git init git add . git commit -m first commit git remote add origin gitgitcode.com:你的用户名/仓库名.git git branch -M main git push -u origin main逐条解释一下。git init创建本地仓库git add .把所有文件加入暂存区git commit生成第一个提交记录。git remote add关联远程地址。git branch -M main把当前分支名强制改成main这是为了和GitCode新建仓库的默认分支保持一致。最后一条git push -u origin main是推送命令其中的-u参数表示把本地main分支和远程main分支关联起来以后你直接执行git push就可以不需要再带参数。第一次push成功后终端会显示一些统计信息比如写入了多少对象、实际推送了多少文件。这时候去GitCode仓库页面刷新一下就能看到你的代码了。6.2 分支操作创建、切换、合并只要你不在一个分支上完成所有工作就一定会用到分支。分支的本质是“平行世界”你在一个分支上开发新功能不管改得多乱都不会影响主分支上稳定运行的代码。常用分支操作如下git branch dev # 创建dev分支 git checkout dev # 切换到dev分支 git checkout -b feature/login # 创建并切换到新分支 git branch # 查看本地分支 git branch -a # 查看所有分支含远程分支在dev分支上改完代码并提交后想把它合并回main分支需要先切回main再执行合并git checkout main git merge dev合并的结果是把dev分支的提交记录整体加入到main分支中。如果两个分支同时改过同一个文件的同一处内容可能会产生冲突。冲突时Git会在文件里标记出冲突区域你需要手动确认保留哪边内容然后git add、git commit完成合并。6.3 多人协作时的拉取与推送节奏如果是多人协作节奏通常是先拉取最新代码再提交自己的改动最后推送。刚上手的人最容易犯的错误是一上来就git push结果被告知推送被拒绝。原因很简单远程仓库上已经有了你本地没有的新提交Git担心你把别人的历史覆盖掉。正确的习惯是每次开始工作前先拉取git pull origin main这条命令相当于把自己本地的main分支更新到和远程一致。之后你在本地修改、提交、推送就会顺畅很多。如果你已经写完了代码才发现远程有新提交也可以先git pull再git pushGit会自动处理合并除非真有冲突需要手动解决。另外要区分两个概念git pull是“下载远程提交并合并到当前分支”git fetch只是“下载远程提交但不合并”。大多数时候你只需要git pull就够了。7. 必读高频报错排查方案7.1 SSH认证失败Permission denied这是新手碰到最多的错误提示通常是Permission denied (publickey)。出现这个错误说明你的SSH密钥没有通过服务器验证。按顺序排查下面的可能性有没有生成过密钥执行ls ~/.ssh/看看是不是空目录。公钥是不是完整地添加到了GitCode粘贴公钥时容易漏掉末尾的邮箱标识虽然不影响验证但尽量整行复制。远程仓库地址用的是不是SSH格式如果之前用的是HTTPS就算SSH配置好了Git也压根不会走SSH流程。当前终端是否加载了正确的私钥大多数情况下ssh-keygen生成的默认私钥会自动生效不用额外配置。排查完这些再执行一次ssh -T gitgitcode.com看是否能正常验证。7.2 推送被拒绝non-fast-forward错误信息里会看到! [rejected]和non-fast-forward。这个问题的核心就是远程仓库有本地没有的提交通常发生在你在GitCode网页端或另一台电脑上提交过代码。解决办法是把远程的新提交拉下来合并再推送git pull origin main git push origin main如果你的本地仓库和远程仓库没有任何共同历史比如你创建仓库时勾选了自动生成README而本地也做了一次commit拉取时会提示合并不相关历史。这时需要加一个参数强制允许合并git pull origin main --allow-unrelated-histories首次合并后两边就有了公共历史以后再推送就恢复正常了。7.3 其他高频错误与处理我把自己这些年在Git和GitCode使用中遇到的小问题整理了一下方便你对照报错或现象原因解决方法fatal: not a git repository当前目录不是Git仓库确认是否执行过git init或用cd进入正确的项目目录remote origin already exists之前已经关联过远程地址git remote remove origin后重新关联每次push都要求输入账号密码用的是HTTPS地址把远程地址改成SSH格式git remote set-url提示Please tell me who you are还没配置user.name和user.email补上.gitconfig配置warning: LF will be replaced by CRLFWindows换行符提示通常无害设置core.autocrlf重新提交时会自动处理还有一个很多新手忽略的点push前先养成git status的习惯用git diff看一下具体改了什么再决定要不要提交。这能帮你避免把调试日志、临时文件、甚至是数据库密码提交到远程仓库这种事故。带过几个新人之后我发现真正难住他们的往往不是命令本身而是不理解“本地仓库和远程仓库是两套独立的仓库”这件事。文件上传到GitCode页面并不算完成只有本地提交、推送、远程同步这三步都走通整套流程才算闭环。我自己现在每次开始动手写代码前都会先想清楚一个问题“这次改动最终要以什么形式出现在远程仓库里”想清楚之后再动手就不会在命令和分支里迷失方向。最后分享一个小技巧如果你经常要手动敲git add、git commit、git push这几条固定动作可以组合成一条别名快速键在Git Bash里执行git config --global alias.pushd commit -a -m以后想快速提交全部改动就输入git pushd 提交说明会减少一点重复劳动。等你真正跑通一次完整流程再去看Git的分支、合并、回滚这些高级功能会发现它们都建立在今天这些基础操作之上并没有想象中那么难。