git 倉庫是什麼?文組開發者血淚經驗分享:我被 AI 改爛專案後,才終於搞懂版本控制
前言
git 倉庫是什麼?簡單講,它是一套「幫你的專案存檔、而且可以隨時跳回上一個版本」的系統。我會把這篇寫出來,是因為我曾經沒有它,結果在用 AI 寫程式時把一個做了十小時的專案整個玩壞、回不去——那種欲哭無淚,我不想讓你也經歷一次。
我是文組出身,沒有資工背景,靠 vibe coding(用自然語言指揮 AI 寫程式)做東西。這篇不是給工程師看的技術文,而是寫給跟我一樣「不會寫程式、但想用 AI 做出真東西」的人。我會用最白話的方式講清楚 git 是什麼、它怎麼運作,以及為什麼你愈不會寫程式,反而愈需要它。
我一個文組的,怎麼會被 git 救一命
先講那次慘案。它讓我第一次認真去搞懂 git 是什麼,而不是把它當成「工程師才需要的東西」。
那天我用 Cursor 做一個靈性串珠 app
當時我在做一個叫「掌上靈珠 PALM CHARM」的靈性串珠 app。概念是:你從一整櫃水晶珠裡挑珠子、拖進串珠盤串成自己的手鍊,每顆珠子都有對應的能量與意義,再搭配「每日運勢」「占卜雷達圖」「我的設計收藏」這些功能,是一個有模有樣的小應用。
它真的不是半成品。光是水晶珠我就做了 27 種,每一顆的材質、光澤、半透明感都不一樣;再加上串珠動畫、背景音樂、把成品輸出成分享圖⋯⋯我用 Cursor(一款內建 AI 的程式編輯器)邊聊邊做,一個晚上接一個晚上慢慢長出來。也正因為它做得夠完整,後面歸零的時候才特別痛。
一路按「Allow」,我根本沒看 AI 改了什麼
問題就出在我太順手。Cursor 每次幫我改完檔案、跳出確認,我都直接按「Allow(允許)」,從來不點開看它到底改了哪幾行——對,我就是那種懶得逐行檢查、直接全部放行的人。功能一直長出來,我也一直爽,完全沒想過「如果它改錯了怎麼辦」。
那陣子我的「版控」是這樣做的:覺得這版還不錯,就把整個檔案另存成 BeadCabinet_版本2、BeadCabinet.jsx.broken 這種土法煉鋼的備份。文組的直覺嘛,存檔不就是另存新檔。現在回頭看,這就是沒有 git 的人,被迫自己發明的爛版控。
檔案大爆炸:10 小時的專案一夜歸零
那一晚我讓 AI 連續大改了好幾次,每次都「全部允許」。改到後來,畫面開始錯亂、檔案彼此打架,一個改動牽動另一個,愈修愈壞。我想回到「幾小時前還好好的那個版本」,卻發現——我根本回不去。我那些手動另存的備份檔,早就跟不上後面的連環改動了。
最後的結果是:那個我做了大約十個小時的專案,等於砍掉重做。如果當時我有用 git,這整件事只要點一下「還原到上一個版本」就解決了。代價這麼慘,我才終於願意停下來,去搞懂這個一直被我忽略的東西。
📖 延伸閱讀:還不熟 vibe coding 的話,先看〈Vibe Coding 是什麼?如何用 AI 大幅優化開發效率〉再回來,這篇會更有感。
git 倉庫是什麼?用「存檔」一次講懂
用一句文組聽得懂的話:git 倉庫是什麼——它就是你整個專案的「存檔系統 + 存檔紀錄本」。打電動會手動存檔、存很多個進度點,git 就是把這件事自動化、而且做得超徹底的工具。
git=幫專案存檔的系統
git 是一套版本控制工具(version control,意思就是「幫你管理一個東西的不同版本」)。它會記住你的專案在每一個時間點長什麼樣子,讓你隨時可以比對、跳回、或救回任何一個過去的版本。它不挑內容,程式碼、文件、設計檔都能管。
倉庫(repo)=放所有存檔紀錄的地方
而倉庫(repo,repository 的簡稱),就是「裝著這個專案所有存檔紀錄的那個盒子」。一個專案配一個倉庫,裡面按時間順序排著你每一次的存檔。你之後做的「跳回上一版」「看看上週改了什麼」,全都是在這個倉庫裡翻紀錄。
用我自己的官網 repo 看「存檔紀錄」長怎樣
講概念太虛,直接看真的。下面是我這個官方網站的 git 倉庫、最近的一段存檔紀錄。每一行就是一次存檔,左邊是代號、中間是日期、右邊是我那次「做了什麼」的說明:
看到了嗎?「部落格重點色改用琥珀金」「修正 favicon 比例失衡」⋯⋯每一次有意義的修改,我都存成一個紀錄。哪天哪個改動出問題,我就能精準跳回它出問題之前的那一格,而不是像當年那樣整個專案陪葬。
文組只要先懂這三個動作就夠
git 的功能很多,但git 新手真的不用全會。你只要先掌握三個動作,就能享受到它八成的好處。下面每個動作我都會講「它在幹嘛」,並直接附上指令讓你照著打;如果你會怕那個黑色的指令視窗,這幾個動作在 GitHub Desktop(一款免費的圖形介面工具)點一點也都做得到。
commit:把這一刻的版本存起來
commit(就是「提交一次存檔」)是最核心的動作。每當你完成一件有意義的事——加好一個功能、修好一個顯示問題——就存一次,並寫一句話說明你做了什麼。所以 git commit 是什麼?它就是「按一次存檔,順便貼一張寫著內容的便利貼」。對照上面小抄:先用 git add . 把這次所有改動放進待存檔清單(最後那個點代表「全部」),再用 git commit 正式存檔,引號裡那句話就是你貼的便利貼,之後翻紀錄一眼就看得到。在 GitHub Desktop 則是左下角打一句說明、按「Commit」。
push:把存檔上傳雲端,換電腦壞掉都不怕
push(推送)是把電腦裡的存檔紀錄上傳到雲端倉庫(最多人用的是 GitHub)。commit 是存在自己電腦,push 是再備份到網路上,這樣就算筆電當機、進水、被偷,你的專案和所有歷史版本都還在,換一台電腦抓回來就好。指令就小抄上那行 git push(只有第一次要多做一步把本機和雲端綁起來),GitHub Desktop 則是按右上角的「Push origin」。
還原:跳回上一個能跑的版本(AI 改壞的後悔藥)
這就是會救你一命的那招,分兩種情況。AI 剛改壞、還沒 commit 時,用小抄上的 git restore . 就能把所有「還沒存檔」的爛改動全部丟掉、回到上一個乾淨版本;想跳回更早的存檔點 時,用 git reset --hard 加上那個版本的代號(就是存檔紀錄裡像 9d8b9e9 的英數字)。提醒:reset --hard 會丟掉那個版本之後的所有改動,確定要回去再用。這些在 GitHub Desktop 也能做——對某個版本按右鍵選還原即可。AI 把東西改爛了?跳回它動手前的那一格就好,git 就是文組 vibe coding 的後悔藥。
為什麼 vibe coding 的人「更」需要 git
很多人以為「我又不會寫程式,git 那種工程師工具跟我沒關係」。我要說的剛好相反:正因為你靠 AI 寫程式,你比工程師更需要 git。
AI 改 code 又快又大,還會很有自信地改錯
工程師自己改程式,一次通常只動幾行,心裡有數。但 AI 不一樣——你一句話,它可能同時改五個檔案、上百行,而且它會用非常肯定的語氣告訴你「已完成、沒問題」,即使它其實改壞了。改動的規模和速度,遠超過你用肉眼追得上的範圍。這就是 vibe coding 版本控制 之所以重要的原因。
沒有 git,連「剛剛還好好的」都救不回來
如果你像當年的我,只會手動另存備份,那麼當 AI 連環改壞之後,你會發現你的備份根本對不上、湊不回一個完整能跑的版本。AI 改壞程式怎麼還原?答案幾乎只有一個:你事前有沒有用 git 好好存檔。有,一鍵跳回;沒有,砍掉重做。沒有中間選項。
改壞的不只功能,可能是資安
更麻煩的是,AI 改壞的有時候不是「畫面跑掉」這種看得見的東西,而是你完全看不到的安全漏洞。有 git 在,你至少能比對「這次改動到底動了哪些東西」,而不是兩眼一抹黑全部放行。
📖 延伸閱讀:AI 到底會默默埋哪些洞?看〈Vibe Coding 的 5 種常見資安漏洞:用 Claude Code 一次健檢〉,教你怎麼一次抓出來。
進階一步:讓 AI 在「分支」上放手亂試,主線永遠乾淨
三個動作上手之後,行有餘力,我很推薦你再認識一個會大幅改變你跟 AI 合作方式的東西:分支(branch)。它把 git 從「後悔藥」升級成「試驗場」。別擔心難度,這一樣是在 GitHub Desktop / VS Code 點按就能做,不用碰指令。
分支(branch)是什麼?一條平行的存檔線
分支,就是從你的正式版「複製一條平行的版本線」出來。你正式、穩定的那條叫主線(main);分支則是另開一條,你在上面怎麼改、怎麼亂搞,主線完全不會被動到。可以想成:你有一份正本鎖在保險箱,然後另外印一份影本拿去塗鴉,塗壞了正本也不痛不癢。
vibe coding 的用法:開一條分支丟給 AI 玩,壞了整條砍掉
這正是當年的我最需要的東西。想叫 AI 大改一個有風險的功能?先開一條分支,讓它在那條上面盡情亂搞,你照樣全部接受、放手讓它改都沒差。覺得它做爛了,整條分支直接刪掉,你的正式版一根寒毛都沒少——不用像我那次一樣,全部陪葬、砍掉重做。比起「每次大改前先存檔」,分支讓你連「會不會弄壞正式版」這個擔心都直接消失。
滿意了再「合併」回主線,正式版全程不受影響
如果 AI 在分支上做得不錯,你再用合併(merge,把兩條版本線接在一起)把這條分支的成果接回主線。所以完整流程是:開分支 → 讓 AI 在上面試 → 好就合併回正式版、壞就整條丟掉。從頭到尾,你那個能跑的正式版都穩穩待在主線上,安全感完全不一樣。
常見問題 FAQ
Q1:我完全不會寫程式,也需要用 git 嗎?
需要,而且更需要。git 不是用來「寫程式」的,是用來「保護你的成果」的。你愈是靠 AI 大量改動、自己愈看不懂改了什麼,就愈需要一個能隨時跳回上一版的安全網。對文組 vibe coder 來說,git 是後悔藥,不是程式技能。
Q2:git 和 GitHub 是同一個東西嗎?
不是,但很容易搞混。git 是裝在你電腦上、負責存檔與管理版本的工具;GitHub 是放這些存檔的雲端空間(類似專門給程式專案用的雲端硬碟)。簡單記:git 負責「存」,GitHub 負責「放到網路上備份和分享」。
Q3:用 Cursor / Claude Code 內建的還原不就好了,為什麼還要 git?
編輯器內建的還原通常只能撤銷最近幾步、關掉就可能消失,而且管不了「跨多個檔案的一整組改動」。git 是把整個專案在每個時間點完整存檔,紀錄永久保留、可以精準跳回任何一格。當年我就是只信任編輯器的還原,結果它根本接不住 AI 的連環大改。
Q4:我該多久 commit 一次?
原則是「每完成一件有意義、而且當下是好的事,就存一次」。不用按時間,按進度。加好一個功能、修好一個顯示問題,就 commit。寧可存得勤一點、每個版本小一點,這樣之後要還原時,你能挑的回去的點才夠細、才不會一還原就倒退一大塊。
Q5:私人專案放上 GitHub,別人看得到嗎?
看你的設定。GitHub 的倉庫分「公開(public)」和「私人(private)」兩種,建立時可以選私人,這樣就只有你(和你授權的人)看得到,別人搜不到也進不去。所以放雲端備份不等於公開,安心存。
總結
回到最開始的問題:git 倉庫是什麼?對文組 vibe coder 來說,它就是你放手讓 AI 工作之前,一定要先準備好的那張安全網。我用一個歸零的十小時專案換來這個教訓——不是「先學會寫程式」,而是先學會存檔,你才敢真正放手讓 AI 去寫。
有趣的是,這整套救我一命的版控習慣,我到現在也沒有自己寫過一行 git 的程式碼,全是靠點按介面和把需求講清楚就做到了——這就是 vibe coding 的精神:你不需要會做每一件事,你需要的是知道哪些事不能省。git,就是那件不能省的事。想了解更多「文組也能懂的軟體開發知識」,可以看我整理的文組必備軟體開發知識大補帖,把這些散落的觀念一次補齊。
想了解更多 AI 工具與 n8n 實務應用結合,歡迎參考官方網站:https://aiqkangber.com/