Day 2 | Git 提交成功,为什么同事看不到?
鱼罐头入职第 2 天
昨天,接口里的参数终于有值了。今天,老王说:“把代码提交一下,我看看。”
一、不就是点一下“提交”嘛
早上,鱼罐头又调了一遍昨天的接口。
嗯,还在。昨天没白熬。
老王从旁边经过:“参数没问题了?把改动提交上来,我看看代码。”
“好。”
答得很快。等老王走了,他才低头找:提交在哪儿?
鱼罐头打开搜索引擎,找到一篇 Git 教程。教程里一会儿 add,一会儿 commit,他看了几眼,先记住一件事:Git 能把代码的修改记录下来。
他回到 IDEA,按教程的提示打开“提交”面板。Windows 默认键位下,可以按 Ctrl + K。
文件列表出来了。
UserController.java,眼熟,昨天参数全是 null 就在这里。
QueryReq.java,也眼熟,后来新建来接 JSON 的。
教程让他先看差异。他选中控制器文件,打开差异视图,找到昨天新加的查询方法。@RequestBody 还在,接收参数用的 QueryReq 也在。
鱼罐头往下翻了翻,接收类也没漏。
他勾上这两个文件,在提交消息里写下:
add: 新增用户条件查询接口
按钮里有“提交”,也有“提交并推送”。
鱼罐头没犹豫:老王说提交,那就提交。
点下去,IDEA 提示成功。
“老王,提交好了!”

刚才在 IDEA 里选好文件、填写消息、点击提交,按 Git 的概念拆开,大致对应下面两步:
# 1. 把这次要提交的改动放进暂存区
# 下面是示例路径,按你项目里的真实位置替换
git add -- src/main/java/com/fishcan/controller/UserController.java
git add -- src/main/java/com/fishcan/dto/QueryReq.java
# 2. 把暂存区里的内容记成一次本地提交
git commit -m "add: 新增用户条件查询接口"IDEA 帮他完成了选取改动和提交。具体界面取决于是否启用暂存区;这里先看懂两件事:这次交哪些改动,以及把它们存成一个版本。
二、我这里明明有啊
鱼罐头刚准备看看下一个任务,老王的消息就来了。
“你提交到哪个分支了?我没看到。”
鱼罐头一愣。
刚刚那个成功提示,总不能是假的吧?
他回到 IDEA,打开 Git 工具窗口里的“日志(Log)”。Windows 默认键位下,可以先按 Alt + 9 打开 Git 工具窗口。
最新一条,自己的名字,消息也是刚写的那句。
他截了张图,把那一行发给老王。
“这条啊,刚交的。”

在 IDEA 的日志里找最近的提交,对照命令可以这样看:
git log --oneline -5这会列出当前分支最近的五条提交。鱼罐头看到的那条记录,就在自己电脑的本地仓库里。
没过一会儿,老王拿着手机走过来了。
“你看,我打开了 Gitee 上的仓库。你的提交在哪儿?”
鱼罐头看看手机,再看看自己的日志。
手机上没有。
电脑上有。
“是不是你那边没刷新?”
老王当着他的面刷了一次。
还是没有。
“你点的是‘提交’,还是‘提交并推送’?”
“提交啊。”
“后面那三个字,你没觉得值得研究一下?”

三、原来只存到自己电脑上了
鱼罐头重新看了一眼那个按钮。
“所以……提交了,还没交到你那儿?”
“你刚才做的是 commit,记在自己的本地仓库里。我在 Gitee 看的是远程仓库。中间还差一步,push。”
“一个本地存档,一个上传存档?”
“对。你在自己电脑上查记录,当然查得到。我的电脑又不能隔空读你的硬盘。”
鱼罐头默默看了一眼聊天记录。自己刚才还特意把那条提交截图发了过去。
“那我以后直接推送,别提交了,不就省一步?”
“你推什么?”
“代码啊。”
“push 推的是已经记下来的提交。你文件改了一半,还没 commit,它不会替你把这半截改动也交上去。”
鱼罐头想了想:“那我可以先改一点,存一次;再改一点,再存一次。等整理好了,一起推给你?”
“可以。没网的时候也能先在本地提交。别把‘自己存好了’当成‘别人已经收到了’就行。”
鱼罐头把那句“提交好了”往上翻了翻。
行,这次确实只好了半截。
四、这次点哪个,我知道了
老王让他回到 IDEA,打开 Git → 推送(Push)。Windows 默认键位下,也可以按 Ctrl + Shift + K。
推送窗口弹出来,里面有刚才那条“add: 新增用户条件查询接口”,还有之前的初始化提交。
“先别急着点。看看它准备往哪儿送。”
鱼罐头顺着窗口看过去:本地 main,目标是 origin/main。
“这个 origin 是谁?”
“远程仓库的名字。这个项目里,它指向 Gitee 上的仓库。右边的 main 是目标分支。”老王指了指旁边的“新建”,“这次推送会在远程创建这个分支。工作里按团队要求选,别只顾点按钮。”

在本篇这个目标关系下,IDEA 的“推送”对应的命令可以写成:
git push origin main也就是:把本地 main 分支的提交,推到 origin 的同名分支。你的项目分支不同,命令里的名字也要跟着变。
鱼罐头核对完目标,点了“推送”。
成功。
他张嘴想喊老王,停了一下。
先自己看看。
打开 Gitee,切到刚才那个目标分支,刷新。
这回有了。
他点开自己的提交,确认控制器的改动、接收类都在,提交编号也和 IDEA 日志里的那条对得上。
鱼罐头把提交链接发给老王。
“这次你再看。”
“看到了。”
鱼罐头松了口气,又回去瞅了眼“提交并推送”。
“原来这个按钮,是把刚才两步连着做。”
“嗯。先提交,再推送。中间推送要是失败了,本地提交还在,别一着急又从头交一遍。”
五、鱼罐头的笔记
回到住处,鱼罐头想起白天那句“提交好了”,又有点不好意思。他打开笔记,把今天点过的按钮和 Git 命令对了一遍。
他原来以为“提交”就是把代码交给老王。现在才知道,中间还有一个远程仓库:
修改文件 → 选择本次改动 → commit(提交) → 本地仓库
↓
push(推送)
↓
远程仓库提交和推送有什么区别?
commit 把选好的改动记成一次本地提交。哪怕没有网络,他也能在自己电脑的 Git 日志里看到它。
push 把本地已有的提交发到远程。老王打开 Gitee 看到的是远程仓库,所以鱼罐头只点“提交”的时候,老王看不到那条记录。
“提交并推送”又是怎么回事?
它把提交和推送接着做。要是提交成功、推送失败,本地提交还在,先看推送为什么失败,别着急再提交一次。
鱼罐头又想起老王让他看的 origin/main:origin 是这次使用的远程仓库名,main 是目标分支。下次点推送之前,他得先看清代码要送到哪里;推送之后,再去对应的远程分支核对提交和文件。
他在笔记最后写下:先提交,再推送,最后去远程看一眼。
六、下集预告
第二天,小刘发来几组新的查询条件:“一会儿我再试试,你帮我看下日志?”
“行,你发。”
鱼罐头打开 IDEA,准备启动项目。昨天才写过的接口,今天总该顺手了吧。
延伸阅读:IDEA:提交与推送、Git:提交、Git:推送。
