{
  "text": "你的電腦裡有沒有這種檔案：\n提案_最終版、提案_最終版2、\n提案_這版才對。\n如果有，那你其實已經在做版本控制了。\n只是用的是最痛苦的做法：\n靠檔名，靠記憶，靠運氣。\n工程師二十年前就受不了了，\n做了一套工具解決它：那套工具叫\nGit，存放的地方叫 GitHub。\nGitHub 你可能點進去過一次，\n然後就關掉了，因為\n那看起來是工程師的地方。\n但如果你最近開始用 AI\n幫你做東西，那個地方遲早會變成你的。\n不是因為你要變成工程師，是因為 AI\n一次改的東西比你多得多，你需要一個地方\n，讓你做壞了回得去。\n這支影片用一條線串起來，\n從你做出第一個東西，到你同時開兩個\nAI 幫你做事。\n每個名詞出現之前，\n我會先讓你遇到那個問題。\n而且每一個動作我都會多講一句：\n做完之後，你怎麼確認它真的做到了。\n因為這一年我自己踩過三次，\n每一次都是它做的事情，\n跟我以為它在做的事情，中間差了一層。\n我們直接開始。\n如果你還不認識我，我是 Gucci。\n我曾經是全球前三大記憶體廠的大數據\n工程師，2019 年放棄年薪近兩百萬，\n全職創業。\n去年，我的線上事業收入 440 萬。\n一年多前，我帶著老婆和剛滿 3\n歲的女兒開始旅居世界——不是度假，\n我照常工作，女兒照常上學，\n世界就是她的課本。\n從峇里島、清邁到檳城，支撐這種日子的，\n就是槓桿 AI：\n用更少的工時，把生活還給家人。\n好，回到今天的主題。\n假設你請 AI 幫你做一個東西。\n一頁網站也好，一個會自己跑的小工具也好\n，或是一份自動整理資料的表格。\n過了半小時，它做出來了，打得開。\n第一個問題馬上來了：這東西現在在哪裡？\n它在你的電腦裡，某個資料夾。\n這代表三件事：換一台電腦你就沒有它了、\n電腦壞了它跟著沒了、\n想給朋友看你只能整包壓縮寄過去。\n所以你需要一個雲端的地方。\n你可能會想，那用\nGoogle Drive 不就好了？\n不行。\n而原因就是這支影片的第一個重點。\n還記得開頭那幾個檔名嗎？\n你為什麼要留那些版本？\n不是因為你愛整理檔案，\n是因為你知道會有一刻，\n你想回到昨天那個版本。\n程式比報告更需要這件事，\n因為改壞的機會高太多了。\n所以放程式的那個地方，\n不能只是把檔案收好，\n它還要記得每一次改了什麼、為什麼改。\nGoogle Drive\n只做前面那半。\n做後面那半的，是今天的第一個名詞：\nGit。\nGit 是一個裝在你電腦裡的程式。\n它只管一件事：你每存一次，\n它就記下這一刻整個資料夾長什麼樣子，\n還有你留給自己的一句話。\n它從頭到尾都在你的機器上跑，\n沒有網路也能用。\n而 GitHub 是網路上的一個網站，\n專門放這種有版本紀錄的資料夾。\n這兩個名字只差三個字母，是兩個東西。\n一個在你電腦裡管紀錄，\n一個在網路上管存放跟給人看。\n怎麼開始？\n你不用學指令。\n不過下面每一句話，\n都要說給能直接動你電腦檔案的 AI\n聽，像 Codex 這種。\n貼進一般聊天視窗，它只會教你怎麼做，\n不會真的去做。\n幫我把這個資料夾建立版本紀錄，\n之後我要放到 GitHub 上。\n做完怎麼確認？\n請 AI 檢查這個\n資料夾有沒有開始記版本，\n並把它查到的結果貼給你看。\n不要特地去找那個叫 .git\n的資料夾，它預設是藏起來的，\n看不到很正常。\nGit 裝好了，但它不會自己動。\n你請 AI 加一個新功能，\n它動了七八個檔案。\n跑起來，壞了。\n這時候的問題不是「壞了」。\n壞掉可以修。\n真正的問題是你不知道它剛剛動了哪幾個\n地方，也不知道要退回到哪裡才是好的。\n你連「半小時前」在哪都指不出來。\n所以在事情還正常的時候，\n你要先留一個回得去的點。\n這個動作叫 commit。\n一次 commit 就是一個點。\n它記下這一刻你整個專案長什麼樣子，\n加上你自己寫的一句話：\n「第一版做好了」。\n之後不管 AI 怎麼改，\n你都指得回這個點。\n所以當 AI 問你「要不要\ncommit」，\n它在問的是：現在這個狀態，\n值不值得留一個回得去的點？\n判準很簡單：只要\n接下來那件事你不確定會不會壞，就先留。\n要請 AI 動一個你不熟的地方，先留。\n要一次改很多檔案，先留。\n改完覺得可以了，再留一個。\n你不用記指令，只要會講這句話：\n這一版是好的，先幫我留一個紀錄點，\n說明寫「第一版做好了」。\n做完怎麼確認？\n這裡有第一個陷阱，而且它最不起眼。\n你留的這些點，全部\n都還在你自己這台電腦上。\n回到開頭那些檔名。\n你存了好幾個版本，每一版你都找得到。\n可是對方一份都還沒收到。\n你只是在自己桌上把東西整理好，\n你沒有把它交出去。\ncommit 就是這樣。\n它不是上傳。\n這台電腦壞掉，那些點會跟著一起消失。\n所以確認的方式是問它：\n「這些改動現在只在我的電腦上，\n還是已經上去了？\n」那另一半怎麼辦？\n把你電腦上記好的那些點，送到\nGitHub 去，這個動作叫\npush。\n送上去之後你就有了三樣東西：\n一份雲端備份、一個可以給人看的網址、\n還有一份不會因為電腦壞掉而消失的完整\n歷史。\n到這裡都很順。\n但這一段的重點在下一句：\n有些東西不能跟著送上去。\n你請 AI 串一個服務，\n它可能會需要一組金鑰。\n那組金鑰就像你家大門的鑰匙，\n誰拿到誰就能用你的帳號、花你的錢。\n問題是那組金鑰通常就寫在專案的某個檔案\n裡。 你 push 的時候，\n如果沒有特別交代，它會一起上去。\n而 GitHub 上的東西是有紀錄的。\n你把它刪掉，紀錄裡還留著。\n有人專門在掃這種東西，\n而且掃得比你想像中快。\n所以這裡要做一件事：告訴 Git\n哪些檔案不要記帳、不要上傳。\n那份清單叫 .gitignore。\n你可以直接這樣講：\n幫我檢查一遍：這個專案裡有沒有金鑰、\n密碼這類不該公開的東西？\n有的話幫我設成不要上傳。\n做完怎麼確認？\n打開 GitHub\n上你那個專案的頁面，\n用眼睛看一遍檔案清單。\n這一段值得你親眼看，因為金鑰一旦公開，\n光把檔案刪掉也收不回來。\n而且如果你發現它真的上去了，\n正確的做法不是把紀錄刪掉，\n是立刻去把那把金鑰換掉。\n紀錄可以整理，但\n外流的那幾分鐘裡誰複製走了，\n你不會知道。\n東西上去了，但它還不是「正式版本」。\nGitHub 上\n通常有一份大家公認的正本。\n你送上去的是你自己那一份。\n要讓你的改動變成正本的一部分，\n得先提出來，讓人看過，才會被收進去。\n這個「提出來」叫 PR。\n收進去的那一下叫 merge。\n一個人做專案的時候，這一段常常會被跳過\n，AI 也可能直接幫你合併。\n但只要有第二個人、或第二個 AI\n參與，這一段就是\n你唯一看得到「誰改了什麼」的地方。\n做完怎麼確認？\n這是我踩過最尷尬的一次。\n我們自己的專案裡有一支編號 708\n的提案。\n它被收進去了，正式結案。\n結案之後，同一天晚上，\n我又往同一個地方推了幾次。\n每一次都成功，沒有錯誤訊息，沒有警告，\n什麼都沒有。\n然後我回報：推上 708 了。\n那支提案早就關閉了。\n後面那幾次不屬於任何一個提案，\n永遠不會進到正本裡面。\n推送本來就會成功，\n因為它只負責把東西送到 GitHub，\n不負責判斷「你送的地方還收不收」。\n而 AI 也不會提醒你，\n它照著你說的做，做完回你成功，\n因為對它來說那確實成功了。\n所以確認的方式是多問一句：\n這個提案還開著嗎？\n幫我確認我剛剛推上去的那個 PR\n現在是什麼狀態。\n如果已經 merge\n了，那我後來推的東西是不是還在外面。\n到目前為止都是你一個人。\n很多人在這裡誤會，\n是因為AI回報「已commit」的時候\n，那個語氣聽起來就像事情辦完了。\n它辦完的是一半：在你這裡辦完了。\n所以整條路是四段，\n你記這四段就好：在你電腦上留點，\n送到GitHub，提出來，被收進去。\n只有最後一段完成，\n你的改動才算是正式版本的一部分。\n前面三段做完，東西都還在旁邊等。\n這件事的重點是：\n這個系統在那個情況下不會提醒任何人。\n你不用會判斷，你只要會問。\n現在假設有第二個人要加進來。\n他要先把東西拿到自己電腦上，\n而這件事有兩個名字，差別只在第幾次。\n第一次整包拿走，叫 clone。\n之後每次拿別人的新進度，叫 pull。\n這裡有個很多人會踩的地方：\n第一次拿的時候，\n不要在網頁上按「下載」。\n下載拿到的是一包死檔案，\n沒有紀錄、沒有歷史，改完也送不回去。\nclone 拿到\n的才是連同整本紀錄的完整專案。\n合作的循環就是四步：拉下來、改、留點、\n送上去。\n現在，那個「別人」常常不是人，\n而是另一個 AI。\n而 AI 不會跟\n你說一聲它拉了什麼、改了什麼。\n然後就會遇到最麻煩的那一種：\n兩邊改到同一個地方。\nGit 這時候會停下來，跳出\nconflict，中文叫衝突。\n意思很直白：同一段\n內容出現了兩個不同的版本，\n它不知道該聽誰的，所以它不猜，它問你。\n現在的 AI 遇到衝突通常會自己處理。\n它會看懂兩邊各自想做什麼，\n然後幫你合：有時候是二選一，\n有時候是兩邊都留，\n有時候是乾脆重寫一段把兩邊的功能接\n起來。\n做完怎麼確認？\n這裡是我覺得最值得你記住的一件事。\nAI 卡住的時候其實很安全，\n因為它會停下來問你。\n危險的是它沒有卡住。\n它沒有你的產品規劃，它只看得到程式碼。\n所以它可能很順地選了一邊，\n而那一邊剛好是你不要的，\n然後回你一句「衝突已解決」。\n畫面上什麼警告都沒有。\n所以合併完之後，\n你要問的不是「解決了嗎」，是：\n這次衝突你是怎麼解的？\n兩邊各自原本想做什麼，\n你留了哪一邊、為什麼？\n重點不是它答不答得出來，是它講的那兩邊\n，你自己各試一次。\n少了一邊，就叫它重做。\n接下來會發生一件很自然的事：\n你會想同時開兩個。\n一個在幫你改版面，你在旁邊等，\n你會想那我為什麼不順便開另一個去處理\n別的。\n問題在於，這兩個\n視窗會直接改同一個資料夾，而\nGit 不會攔。\n剛剛那個衝突警告，\n只在合併兩份紀錄時才會出現。\n同一份東西，兩個人同時在上面動手，\n這件事你在辦公室裡見過。\n兩個人各自打開同一份共用檔案，各自改，\n各自存。\n最後存的那個人，\n蓋掉前一個人的所有修改。\n而前一個人不會收到通知，\n他要到很久以後才會發現自己那半天不見\n了。 在專案裡一樣，只是更難察覺，\n因為兩邊都是 AI，\n它們不會抬頭跟你說一聲。\n這時候 AI 可能\n會問你要不要開一個分支。\n分支的意思是「跟正本隔開來做」，\n改壞了整條丟掉就好。\n那是好東西，但它解決不了現在這個問題。\n因為分支再多，你\n電腦上那個資料夾還是只有一個，兩個\nAI 還是站在同一張桌子前面。\n真正解決這件事的做法只有一個：給第二個\nAI 第二個資料夾。\n這個做法叫 worktree。\n它在你硬碟上多開一個資料夾，\n裝的是同一個專案，\n但跟原本那個各自獨立。\n一個 AI 待一個，互不干擾。\n做完怎麼確認？\n分別問這兩個 AI：\n你現在在哪個資料夾？\n兩個答案不一樣，才是真的分開了。\n沒做到的時候會發生什麼，\n我們是用最貴的方式知道的。\n有一次，我們有兩個 AI\n同時在做事，而它們沒有各自的資料夾，\n用的是同一個。\n其中一個想看「原本的版本長什麼樣」，\n就下了兩道指令。\n這兩道指令，一個\n人單獨工作的時候完全正常。\n你不用會下這兩道指令，\n你只要知道它們做了什麼：把桌面收乾淨，\n然後把資料夾換成另一個版本。\n但那天不是一個人在工作。\n那兩道指令的作用範圍，涵蓋了另一個\nAI還沒有存好的東西。\n大約五百七十行被掃掉了，是另一個 AI\n還沒留下紀錄的工作。\n而它不會報錯。\n指令成功執行，畫面上什麼都沒有。\n要等到另一邊回頭找自己的東西，\n才會發現。\n如果那個人是你，\n你的第一個念頭會是自己記錯了。\n所以這一段你要帶走的只有一句：\n不要讓兩個 AI\n在同一個資料夾裡動手。\n我要同時開兩個來做不同的事，\n幫我各開一個獨立的工作資料夾，\n不要讓它們共用同一個。\n最後講你每天都在怕的那一刻：AI\n真的把東西改壞了。\n分兩種情況，而且分法只有一個問題：\n你有沒有留過點。\n第一種，你還沒留點。\nAI 剛剛改了一堆檔案，\n你跑起來完全不對。\n這時候的動作叫 restore，\n意思是把這些還沒留過點的改動全部丟掉，\n回到上一個點。\n就當剛剛那半小時沒發生過。\n第二種，你已經留過點了，\n而且是那個點本身有問題。\n這時候比較安全的做法叫 revert。\n它不是把歷史刪掉，是再記一筆，\n內容是把前面那筆抵消掉。\n為什麼要繞這一圈？\n因為直接刪掉歷史的話，\n跟你一起做的人手上版本會對不上，\n而且他不會知道發生過什麼。\n多記一筆抵消，所有人都看得到「加錯了、\n然後被抵消了」。\n這兩個你都不用記，你只要說：\n剛剛這次的改動我不要了，\n請幫我回到上一個正常的版本。\nAI 會自己看現在的狀態，\n決定該用哪一個。\n做完怎麼確認？\n這裡有兩件事是我覺得沒有人會先告訴你\n的。 第一，restore 是不可逆的。\n它丟掉的東西沒有回收桶。\n不像刪檔案還能去垃圾桶撿，\n那些改動是真的消失了，Git\n裡面任何地方都找不到，\n因為它們從來沒有被記下來過。\n剛剛那五百七十行其實不是這一種。\n那次是被暫時收起來，\n還找得回來；restore\n丟掉的才是真的沒有回收桶。\n但兩次的傷害是同一種：\n做那件事的不是壞掉的程式，\n是收東西的動作本身，\n而你不會知道要去哪裡找。\n所以在說「回到上一個正常版本」之前，\n值得多問一句：\n這個動作會丟掉哪些還沒記錄的改動？\n先列給我看。\n第二件是他們很少講的第三種情況：\n東西已經送出去了。\n這時候光救你自己的電腦沒有用，要連\nGitHub 上那一份一起處理。\n你問 AI 的時候要把這件事講出來：\n「這批改動我已經推上去了，\n也要一起處理。\n」所以這一章的判準是：\n在說「回到上一個版本」之前，\n先問它會丟掉什麼。\n救回來之後還有最後一件事，\n而且跟前面幾章不一樣：\n前面都是事情沒到，這次是事情做到了，\n但份量不對。\n這是我踩過最容易被騙的一次。\n有一次我叫 AI 算給我看它改了多少。\n它回我：刪掉兩千六百二十一行。\n兩千六百多行。\n而我心裡預期的是幾十行。\n我們當時真的停下來查了。\n實際上那次刪掉的是三十行。\n比對兩個版本有兩種算法。\n一種是拿兩邊現在的樣子直接比。\n另一種是先回到你們還一樣的時候，\n再從那裡往後算你改了什麼。\n當你這一份比正本少了幾次更新，\n第一種算法會把別人後來加進去的東西，\n全部算成你刪掉的。\n你手上沒有，於是它就被記成你刪的。\n而你看不出來。\n兩個數字長得一模一樣，都是「刪掉 N\n行」，沒有任何東西告訴你這兩個 N\n的意思不同。\n判準是最好記的一個：不要自己算，看\nGitHub 自己算的那個數字。\nGitHub 在\n每一個提案上都會顯示改了多少，\n那個數字用的是第二種算法，是權威值。\n這個 PR 在 GitHub\n上顯示的新增跟刪除行數是多少？\n跟我預期改的份量對不對得上？\n對得上就過。\n對不上，那才是真的要查的時候。\n你不用背數字，你只要拿它報的份量，\n跟你交代它做的事比一下。\n明顯不成比例，就值得問一句。\nAI 問你的那幾句話，\n你現在都答得出來了。\nAI沒有騙你。\n那兩種算法都是對的，\n它們回答的是不同的問題。\nAI挑了比較常見的那一種，\n而它不知道你要問的是另一個。\n其實這支片講的三次，\n全部是同一個形狀：沒有一次是AI亂來，\n每一次都是它做的事情跟你以為它在做的\n事情，中間差了一層。\n要不要 commit，\n問的是值不值得留一個回得去的點。\n要不要開分支，問\n的是要不要跟正本隔開來做。\n要不要發 PR，\n問的是要不要正式提出去。\n但我更想留給你的是另一半。\n這支片每一個動作我都多講了一句「做完\n怎麼確認」，因為\n那才是這套工具對你真正的用處：\n東西是還在我電腦上，還是已經送出去了？\n我送去的那個地方，還收不收？\n兩個 AI 有沒有共用同一個資料夾？\n它給我的份量，跟我以為的對得上嗎？\n四個問題，你不用會做，你只要會問。\n對不寫程式的人來說，\n版本控制真正的價值不是多學會一個工具，\n是它把 AI 做的事情變成看得見的。\n在那之前，AI 說完成了你只能相信；\n有了之後，你可以去看。\n而這個差別會決定你敢不敢把更大的事情\n交出去。\n你敢交，是因為你\n知道出事了退得回來、看得出來。\n這才是時間真正省下來的地方。\n你不會因為看完這支影片就不再踩到，\n我到現在還是會。\n差別在於現在我知道要去哪裡看。\n如果你想把這幾個檢查變成習慣，\n我在免費社群裡整理了一份可以直接貼給\nAI 的檢查清單，\n就是這支影片講的這四個問題。\n連結在資訊欄，網址是\nguccidgi.\ncom/aifree。\n不過在你去看之前，先做一件事。\n打開你手邊那個 AI\n幫你做到一半的東西，\n問它一句：這些改動現在只在我的電腦上，\n還是已經上去了？\n那一次就夠了。\n你會知道我在講什麼。",
  "language": "zh",
  "duration": 979.0,
  "segments": [
    {
      "id": 0,
      "start": 0.0,
      "end": 2.96,
      "text": "你的電腦裡有沒有這種檔案：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 1,
      "start": 2.96,
      "end": 5.67,
      "text": "提案_最終版、提案_最終版2、",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 2,
      "start": 5.67,
      "end": 7.24,
      "text": "提案_這版才對。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 3,
      "start": 7.24,
      "end": 9.93,
      "text": "如果有，那你其實已經在做版本控制了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 4,
      "start": 9.93,
      "end": 12.45,
      "text": "只是用的是最痛苦的做法：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 5,
      "start": 12.45,
      "end": 14.73,
      "text": "靠檔名，靠記憶，靠運氣。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 6,
      "start": 14.73,
      "end": 16.7,
      "text": "工程師二十年前就受不了了，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 7,
      "start": 16.7,
      "end": 19.01,
      "text": "做了一套工具解決它：那套工具叫",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 8,
      "start": 19.01,
      "end": 21.58,
      "text": "Git，存放的地方叫 GitHub。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 9,
      "start": 21.58,
      "end": 23.96,
      "text": "GitHub 你可能點進去過一次，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 10,
      "start": 23.96,
      "end": 25.23,
      "text": "然後就關掉了，因為",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 11,
      "start": 25.23,
      "end": 27.08,
      "text": "那看起來是工程師的地方。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 12,
      "start": 27.08,
      "end": 28.95,
      "text": "但如果你最近開始用 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 13,
      "start": 28.95,
      "end": 31.77,
      "text": "幫你做東西，那個地方遲早會變成你的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 14,
      "start": 31.77,
      "end": 34.4,
      "text": "不是因為你要變成工程師，是因為 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 15,
      "start": 34.4,
      "end": 37.35,
      "text": "一次改的東西比你多得多，你需要一個地方",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 16,
      "start": 37.35,
      "end": 38.76,
      "text": "，讓你做壞了回得去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 17,
      "start": 38.76,
      "end": 40.67,
      "text": "這支影片用一條線串起來，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 18,
      "start": 40.67,
      "end": 43.46,
      "text": "從你做出第一個東西，到你同時開兩個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 19,
      "start": 43.46,
      "end": 44.6,
      "text": "AI 幫你做事。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 20,
      "start": 44.6,
      "end": 46.12,
      "text": "每個名詞出現之前，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 21,
      "start": 46.12,
      "end": 48.3,
      "text": "我會先讓你遇到那個問題。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 22,
      "start": 48.3,
      "end": 50.55,
      "text": "而且每一個動作我都會多講一句：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 23,
      "start": 50.55,
      "end": 53.05,
      "text": "做完之後，你怎麼確認它真的做到了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 24,
      "start": 53.05,
      "end": 55.4,
      "text": "因為這一年我自己踩過三次，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 25,
      "start": 55.4,
      "end": 57.36,
      "text": "每一次都是它做的事情，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 26,
      "start": 57.36,
      "end": 60.6,
      "text": "跟我以為它在做的事情，中間差了一層。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 27,
      "start": 60.6,
      "end": 61.57,
      "text": "我們直接開始。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 28,
      "start": 62.37,
      "end": 65.16,
      "text": "如果你還不認識我，我是 Gucci。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 29,
      "start": 65.16,
      "end": 67.88,
      "text": "我曾經是全球前三大記憶體廠的大數據",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 30,
      "start": 67.88,
      "end": 70.92,
      "text": "工程師，2019 年放棄年薪近兩百萬，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 31,
      "start": 70.92,
      "end": 71.72,
      "text": "全職創業。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 32,
      "start": 71.72,
      "end": 74.58,
      "text": "去年，我的線上事業收入 440 萬。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 33,
      "start": 74.58,
      "end": 77.16,
      "text": "一年多前，我帶著老婆和剛滿 3",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 34,
      "start": 77.16,
      "end": 79.93,
      "text": "歲的女兒開始旅居世界——不是度假，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 35,
      "start": 79.93,
      "end": 82.11,
      "text": "我照常工作，女兒照常上學，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 36,
      "start": 82.11,
      "end": 83.87,
      "text": "世界就是她的課本。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 37,
      "start": 83.87,
      "end": 87.14,
      "text": "從峇里島、清邁到檳城，支撐這種日子的，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 38,
      "start": 87.14,
      "end": 88.37,
      "text": "就是槓桿 AI：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 39,
      "start": 88.37,
      "end": 91.03,
      "text": "用更少的工時，把生活還給家人。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 40,
      "start": 91.03,
      "end": 92.83,
      "text": "好，回到今天的主題。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 41,
      "start": 92.84,
      "end": 95.16,
      "text": "假設你請 AI 幫你做一個東西。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 42,
      "start": 95.16,
      "end": 97.9,
      "text": "一頁網站也好，一個會自己跑的小工具也好",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 43,
      "start": 97.9,
      "end": 99.98,
      "text": "，或是一份自動整理資料的表格。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 44,
      "start": 99.98,
      "end": 102.96,
      "text": "過了半小時，它做出來了，打得開。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 45,
      "start": 102.96,
      "end": 105.78,
      "text": "第一個問題馬上來了：這東西現在在哪裡？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 46,
      "start": 105.78,
      "end": 108.25,
      "text": "它在你的電腦裡，某個資料夾。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 47,
      "start": 108.25,
      "end": 111.14,
      "text": "這代表三件事：換一台電腦你就沒有它了、",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 48,
      "start": 111.14,
      "end": 112.67,
      "text": "電腦壞了它跟著沒了、",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 49,
      "start": 112.67,
      "end": 115.33,
      "text": "想給朋友看你只能整包壓縮寄過去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 50,
      "start": 115.33,
      "end": 117.59,
      "text": "所以你需要一個雲端的地方。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 51,
      "start": 117.59,
      "end": 118.52,
      "text": "你可能會想，那用",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 52,
      "start": 118.52,
      "end": 120.88,
      "text": "Google Drive 不就好了？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 53,
      "start": 120.88,
      "end": 121.44,
      "text": "不行。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 54,
      "start": 121.44,
      "end": 123.73,
      "text": "而原因就是這支影片的第一個重點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 55,
      "start": 123.73,
      "end": 125.6,
      "text": "還記得開頭那幾個檔名嗎？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 56,
      "start": 125.6,
      "end": 126.77,
      "text": "你為什麼要留那些版本？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 57,
      "start": 126.77,
      "end": 128.23,
      "text": "不是因為你愛整理檔案，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 58,
      "start": 128.23,
      "end": 129.68,
      "text": "是因為你知道會有一刻，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 59,
      "start": 129.68,
      "end": 131.23,
      "text": "你想回到昨天那個版本。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 60,
      "start": 131.23,
      "end": 133.02,
      "text": "程式比報告更需要這件事，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 61,
      "start": 133.02,
      "end": 134.9,
      "text": "因為改壞的機會高太多了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 62,
      "start": 134.9,
      "end": 136.68,
      "text": "所以放程式的那個地方，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 63,
      "start": 136.68,
      "end": 138.28,
      "text": "不能只是把檔案收好，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 64,
      "start": 138.28,
      "end": 141.23,
      "text": "它還要記得每一次改了什麼、為什麼改。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 65,
      "start": 141.23,
      "end": 142.5,
      "text": "Google Drive",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 66,
      "start": 142.5,
      "end": 143.3,
      "text": "只做前面那半。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 67,
      "start": 143.3,
      "end": 145.83,
      "text": "做後面那半的，是今天的第一個名詞：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 68,
      "start": 145.83,
      "end": 146.44,
      "text": "Git。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 69,
      "start": 146.44,
      "end": 149.32,
      "text": "Git 是一個裝在你電腦裡的程式。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 70,
      "start": 149.32,
      "end": 151.23,
      "text": "它只管一件事：你每存一次，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 71,
      "start": 151.23,
      "end": 154.17,
      "text": "它就記下這一刻整個資料夾長什麼樣子，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 72,
      "start": 154.17,
      "end": 156.17,
      "text": "還有你留給自己的一句話。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 73,
      "start": 156.17,
      "end": 158.45,
      "text": "它從頭到尾都在你的機器上跑，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 74,
      "start": 158.45,
      "end": 159.77,
      "text": "沒有網路也能用。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 75,
      "start": 159.77,
      "end": 161.88,
      "text": "而 GitHub 是網路上的一個網站，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 76,
      "start": 161.88,
      "end": 163.83,
      "text": "專門放這種有版本紀錄的資料夾。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 77,
      "start": 163.83,
      "end": 166.71,
      "text": "這兩個名字只差三個字母，是兩個東西。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 78,
      "start": 166.71,
      "end": 168.75,
      "text": "一個在你電腦裡管紀錄，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 79,
      "start": 168.75,
      "end": 171.5,
      "text": "一個在網路上管存放跟給人看。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 80,
      "start": 171.5,
      "end": 172.22,
      "text": "怎麼開始？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 81,
      "start": 172.22,
      "end": 173.55,
      "text": "你不用學指令。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 82,
      "start": 173.55,
      "end": 174.82,
      "text": "不過下面每一句話，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 83,
      "start": 174.82,
      "end": 177.36,
      "text": "都要說給能直接動你電腦檔案的 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 84,
      "start": 177.36,
      "end": 178.89,
      "text": "聽，像 Codex 這種。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 85,
      "start": 178.89,
      "end": 181.97,
      "text": "貼進一般聊天視窗，它只會教你怎麼做，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 86,
      "start": 181.97,
      "end": 183.22,
      "text": "不會真的去做。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 87,
      "start": 183.22,
      "end": 185.23,
      "text": "幫我把這個資料夾建立版本紀錄，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 88,
      "start": 185.23,
      "end": 187.19,
      "text": "之後我要放到 GitHub 上。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 89,
      "start": 187.19,
      "end": 188.47,
      "text": "做完怎麼確認？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 90,
      "start": 188.47,
      "end": 189.54,
      "text": "請 AI 檢查這個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 91,
      "start": 189.54,
      "end": 191.22,
      "text": "資料夾有沒有開始記版本，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 92,
      "start": 191.22,
      "end": 193.16,
      "text": "並把它查到的結果貼給你看。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 93,
      "start": 193.16,
      "end": 195.19,
      "text": "不要特地去找那個叫 .git",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 94,
      "start": 195.19,
      "end": 197.22,
      "text": "的資料夾，它預設是藏起來的，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 95,
      "start": 197.22,
      "end": 199.14,
      "text": "看不到很正常。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 96,
      "start": 199.14,
      "end": 201.43,
      "text": "Git 裝好了，但它不會自己動。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 97,
      "start": 201.43,
      "end": 203.23,
      "text": "你請 AI 加一個新功能，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 98,
      "start": 203.23,
      "end": 204.77,
      "text": "它動了七八個檔案。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 99,
      "start": 204.77,
      "end": 205.75,
      "text": "跑起來，壞了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 100,
      "start": 205.75,
      "end": 207.51,
      "text": "這時候的問題不是「壞了」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 101,
      "start": 207.51,
      "end": 208.77,
      "text": "壞掉可以修。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 102,
      "start": 208.77,
      "end": 211.55,
      "text": "真正的問題是你不知道它剛剛動了哪幾個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 103,
      "start": 211.55,
      "end": 214.12,
      "text": "地方，也不知道要退回到哪裡才是好的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 104,
      "start": 214.12,
      "end": 216.51,
      "text": "你連「半小時前」在哪都指不出來。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 105,
      "start": 216.51,
      "end": 218.42,
      "text": "所以在事情還正常的時候，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 106,
      "start": 218.42,
      "end": 220.44,
      "text": "你要先留一個回得去的點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 107,
      "start": 220.44,
      "end": 221.65,
      "text": "這個動作叫 commit。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 108,
      "start": 221.65,
      "end": 223.16,
      "text": "一次 commit 就是一個點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 109,
      "start": 223.16,
      "end": 225.95,
      "text": "它記下這一刻你整個專案長什麼樣子，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 110,
      "start": 225.95,
      "end": 227.69,
      "text": "加上你自己寫的一句話：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 111,
      "start": 227.69,
      "end": 228.84,
      "text": "「第一版做好了」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 112,
      "start": 228.84,
      "end": 230.22,
      "text": "之後不管 AI 怎麼改，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 113,
      "start": 230.22,
      "end": 231.55,
      "text": "你都指得回這個點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 114,
      "start": 231.55,
      "end": 233.21,
      "text": "所以當 AI 問你「要不要",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 115,
      "start": 233.21,
      "end": 234.2,
      "text": "commit」，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 116,
      "start": 234.2,
      "end": 236.03,
      "text": "它在問的是：現在這個狀態，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 117,
      "start": 236.03,
      "end": 238.11,
      "text": "值不值得留一個回得去的點？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 118,
      "start": 238.11,
      "end": 239.18,
      "text": "判準很簡單：只要",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 119,
      "start": 239.18,
      "end": 241.89,
      "text": "接下來那件事你不確定會不會壞，就先留。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 120,
      "start": 241.89,
      "end": 244.64,
      "text": "要請 AI 動一個你不熟的地方，先留。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 121,
      "start": 244.64,
      "end": 246.34,
      "text": "要一次改很多檔案，先留。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 122,
      "start": 246.34,
      "end": 248.41,
      "text": "改完覺得可以了，再留一個。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 123,
      "start": 248.41,
      "end": 250.5,
      "text": "你不用記指令，只要會講這句話：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 124,
      "start": 250.5,
      "end": 252.9,
      "text": "這一版是好的，先幫我留一個紀錄點，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 125,
      "start": 252.9,
      "end": 254.45,
      "text": "說明寫「第一版做好了」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 126,
      "start": 254.45,
      "end": 255.73,
      "text": "做完怎麼確認？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 127,
      "start": 255.73,
      "end": 258.37,
      "text": "這裡有第一個陷阱，而且它最不起眼。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 128,
      "start": 258.37,
      "end": 259.74,
      "text": "你留的這些點，全部",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 129,
      "start": 259.74,
      "end": 261.72,
      "text": "都還在你自己這台電腦上。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 130,
      "start": 261.72,
      "end": 263.03,
      "text": "回到開頭那些檔名。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 131,
      "start": 263.03,
      "end": 265.58,
      "text": "你存了好幾個版本，每一版你都找得到。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 132,
      "start": 265.58,
      "end": 267.45,
      "text": "可是對方一份都還沒收到。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 133,
      "start": 267.45,
      "end": 269.79,
      "text": "你只是在自己桌上把東西整理好，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 134,
      "start": 269.79,
      "end": 271.23,
      "text": "你沒有把它交出去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 135,
      "start": 271.23,
      "end": 272.4,
      "text": "commit 就是這樣。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 136,
      "start": 272.4,
      "end": 273.37,
      "text": "它不是上傳。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 137,
      "start": 273.37,
      "end": 276.59,
      "text": "這台電腦壞掉，那些點會跟著一起消失。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 138,
      "start": 276.59,
      "end": 278.42,
      "text": "所以確認的方式是問它：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 139,
      "start": 278.42,
      "end": 280.81,
      "text": "「這些改動現在只在我的電腦上，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 140,
      "start": 280.81,
      "end": 282.1,
      "text": "還是已經上去了？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 141,
      "start": 282.1,
      "end": 284.6,
      "text": "」那另一半怎麼辦？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 142,
      "start": 284.6,
      "end": 286.49,
      "text": "把你電腦上記好的那些點，送到",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 143,
      "start": 286.49,
      "end": 288.24,
      "text": "GitHub 去，這個動作叫",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 144,
      "start": 288.24,
      "end": 288.93,
      "text": "push。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 145,
      "start": 288.93,
      "end": 290.9,
      "text": "送上去之後你就有了三樣東西：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 146,
      "start": 290.9,
      "end": 293.33,
      "text": "一份雲端備份、一個可以給人看的網址、",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 147,
      "start": 293.33,
      "end": 296.07,
      "text": "還有一份不會因為電腦壞掉而消失的完整",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 148,
      "start": 296.07,
      "end": 296.47,
      "text": "歷史。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 149,
      "start": 296.47,
      "end": 297.84,
      "text": "到這裡都很順。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 150,
      "start": 297.84,
      "end": 300.12,
      "text": "但這一段的重點在下一句：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 151,
      "start": 300.12,
      "end": 302.5,
      "text": "有些東西不能跟著送上去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 152,
      "start": 302.5,
      "end": 303.89,
      "text": "你請 AI 串一個服務，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 153,
      "start": 303.89,
      "end": 305.54,
      "text": "它可能會需要一組金鑰。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 154,
      "start": 305.54,
      "end": 307.56,
      "text": "那組金鑰就像你家大門的鑰匙，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 155,
      "start": 307.56,
      "end": 310.0,
      "text": "誰拿到誰就能用你的帳號、花你的錢。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 156,
      "start": 310.0,
      "end": 313.2,
      "text": "問題是那組金鑰通常就寫在專案的某個檔案",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 157,
      "start": 313.2,
      "end": 314.63,
      "text": "裡。 你 push 的時候，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 158,
      "start": 314.63,
      "end": 316.74,
      "text": "如果沒有特別交代，它會一起上去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 159,
      "start": 316.74,
      "end": 318.54,
      "text": "而 GitHub 上的東西是有紀錄的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 160,
      "start": 318.54,
      "end": 321.33,
      "text": "你把它刪掉，紀錄裡還留著。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 161,
      "start": 321.33,
      "end": 323.36,
      "text": "有人專門在掃這種東西，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 162,
      "start": 323.36,
      "end": 325.5,
      "text": "而且掃得比你想像中快。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 163,
      "start": 325.5,
      "end": 327.81,
      "text": "所以這裡要做一件事：告訴 Git",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 164,
      "start": 327.81,
      "end": 329.89,
      "text": "哪些檔案不要記帳、不要上傳。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 165,
      "start": 329.89,
      "end": 331.88,
      "text": "那份清單叫 .gitignore。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 166,
      "start": 331.88,
      "end": 333.13,
      "text": "你可以直接這樣講：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 167,
      "start": 333.13,
      "end": 335.61,
      "text": "幫我檢查一遍：這個專案裡有沒有金鑰、",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 168,
      "start": 335.61,
      "end": 337.42,
      "text": "密碼這類不該公開的東西？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 169,
      "start": 337.42,
      "end": 339.45,
      "text": "有的話幫我設成不要上傳。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 170,
      "start": 339.45,
      "end": 340.73,
      "text": "做完怎麼確認？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 171,
      "start": 340.73,
      "end": 341.99,
      "text": "打開 GitHub",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 172,
      "start": 341.99,
      "end": 343.41,
      "text": "上你那個專案的頁面，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 173,
      "start": 343.41,
      "end": 345.09,
      "text": "用眼睛看一遍檔案清單。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 174,
      "start": 345.09,
      "end": 348.12,
      "text": "這一段值得你親眼看，因為金鑰一旦公開，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 175,
      "start": 348.12,
      "end": 350.19,
      "text": "光把檔案刪掉也收不回來。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 176,
      "start": 350.19,
      "end": 352.3,
      "text": "而且如果你發現它真的上去了，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 177,
      "start": 352.3,
      "end": 354.26,
      "text": "正確的做法不是把紀錄刪掉，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 178,
      "start": 354.26,
      "end": 356.15,
      "text": "是立刻去把那把金鑰換掉。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 179,
      "start": 356.15,
      "end": 357.26,
      "text": "紀錄可以整理，但",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 180,
      "start": 357.26,
      "end": 359.32,
      "text": "外流的那幾分鐘裡誰複製走了，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 181,
      "start": 359.32,
      "end": 361.02,
      "text": "你不會知道。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 182,
      "start": 361.02,
      "end": 363.41,
      "text": "東西上去了，但它還不是「正式版本」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 183,
      "start": 363.41,
      "end": 364.48,
      "text": "GitHub 上",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 184,
      "start": 364.48,
      "end": 366.43,
      "text": "通常有一份大家公認的正本。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 185,
      "start": 366.43,
      "end": 368.23,
      "text": "你送上去的是你自己那一份。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 186,
      "start": 368.23,
      "end": 370.79,
      "text": "要讓你的改動變成正本的一部分，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 187,
      "start": 370.79,
      "end": 373.64,
      "text": "得先提出來，讓人看過，才會被收進去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 188,
      "start": 373.64,
      "end": 375.04,
      "text": "這個「提出來」叫 PR。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 189,
      "start": 375.04,
      "end": 376.91,
      "text": "收進去的那一下叫 merge。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 190,
      "start": 376.91,
      "end": 380.08,
      "text": "一個人做專案的時候，這一段常常會被跳過",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 191,
      "start": 380.08,
      "end": 382.12,
      "text": "，AI 也可能直接幫你合併。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 192,
      "start": 382.12,
      "end": 384.58,
      "text": "但只要有第二個人、或第二個 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 193,
      "start": 384.58,
      "end": 385.8,
      "text": "參與，這一段就是",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 194,
      "start": 385.8,
      "end": 388.36,
      "text": "你唯一看得到「誰改了什麼」的地方。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 195,
      "start": 388.36,
      "end": 389.64,
      "text": "做完怎麼確認？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 196,
      "start": 389.64,
      "end": 391.73,
      "text": "這是我踩過最尷尬的一次。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 197,
      "start": 391.73,
      "end": 394.32,
      "text": "我們自己的專案裡有一支編號 708",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 198,
      "start": 394.32,
      "end": 394.91,
      "text": "的提案。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 199,
      "start": 394.91,
      "end": 396.83,
      "text": "它被收進去了，正式結案。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 200,
      "start": 396.83,
      "end": 398.41,
      "text": "結案之後，同一天晚上，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 201,
      "start": 398.41,
      "end": 400.61,
      "text": "我又往同一個地方推了幾次。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 202,
      "start": 400.61,
      "end": 403.41,
      "text": "每一次都成功，沒有錯誤訊息，沒有警告，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 203,
      "start": 403.41,
      "end": 404.38,
      "text": "什麼都沒有。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 204,
      "start": 404.38,
      "end": 406.93,
      "text": "然後我回報：推上 708 了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 205,
      "start": 406.93,
      "end": 408.47,
      "text": "那支提案早就關閉了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 206,
      "start": 408.47,
      "end": 410.7,
      "text": "後面那幾次不屬於任何一個提案，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 207,
      "start": 410.7,
      "end": 412.4,
      "text": "永遠不會進到正本裡面。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 208,
      "start": 412.4,
      "end": 413.63,
      "text": "推送本來就會成功，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 209,
      "start": 413.63,
      "end": 416.25,
      "text": "因為它只負責把東西送到 GitHub，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 210,
      "start": 416.25,
      "end": 418.5,
      "text": "不負責判斷「你送的地方還收不收」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 211,
      "start": 418.5,
      "end": 420.33,
      "text": "而 AI 也不會提醒你，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 212,
      "start": 420.33,
      "end": 422.96,
      "text": "它照著你說的做，做完回你成功，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 213,
      "start": 422.96,
      "end": 425.49,
      "text": "因為對它來說那確實成功了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 214,
      "start": 425.49,
      "end": 427.68,
      "text": "所以確認的方式是多問一句：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 215,
      "start": 427.68,
      "end": 429.23,
      "text": "這個提案還開著嗎？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 216,
      "start": 429.23,
      "end": 431.42,
      "text": "幫我確認我剛剛推上去的那個 PR",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 217,
      "start": 431.42,
      "end": 432.54,
      "text": "現在是什麼狀態。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 218,
      "start": 432.54,
      "end": 433.72,
      "text": "如果已經 merge",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 219,
      "start": 433.72,
      "end": 436.72,
      "text": "了，那我後來推的東西是不是還在外面。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 220,
      "start": 436.72,
      "end": 438.48,
      "text": "到目前為止都是你一個人。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 221,
      "start": 438.68,
      "end": 440.08,
      "text": "很多人在這裡誤會，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 222,
      "start": 440.08,
      "end": 442.04,
      "text": "是因為AI回報「已commit」的時候",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 223,
      "start": 442.04,
      "end": 444.84,
      "text": "，那個語氣聽起來就像事情辦完了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 224,
      "start": 444.84,
      "end": 447.22,
      "text": "它辦完的是一半：在你這裡辦完了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 225,
      "start": 447.22,
      "end": 448.56,
      "text": "所以整條路是四段，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 226,
      "start": 448.56,
      "end": 450.86,
      "text": "你記這四段就好：在你電腦上留點，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 227,
      "start": 450.86,
      "end": 453.08,
      "text": "送到GitHub，提出來，被收進去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 228,
      "start": 453.08,
      "end": 454.22,
      "text": "只有最後一段完成，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 229,
      "start": 454.22,
      "end": 456.46,
      "text": "你的改動才算是正式版本的一部分。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 230,
      "start": 456.46,
      "end": 458.98,
      "text": "前面三段做完，東西都還在旁邊等。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 231,
      "start": 458.98,
      "end": 460.54,
      "text": "這件事的重點是：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 232,
      "start": 460.54,
      "end": 462.82,
      "text": "這個系統在那個情況下不會提醒任何人。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 233,
      "start": 462.82,
      "end": 464.7,
      "text": "你不用會判斷，你只要會問。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 234,
      "start": 464.7,
      "end": 466.9,
      "text": "現在假設有第二個人要加進來。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 235,
      "start": 466.9,
      "end": 469.29,
      "text": "他要先把東西拿到自己電腦上，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 236,
      "start": 469.29,
      "end": 472.34,
      "text": "而這件事有兩個名字，差別只在第幾次。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 237,
      "start": 472.34,
      "end": 474.5,
      "text": "第一次整包拿走，叫 clone。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 238,
      "start": 474.5,
      "end": 477.02,
      "text": "之後每次拿別人的新進度，叫 pull。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 239,
      "start": 477.02,
      "end": 479.03,
      "text": "這裡有個很多人會踩的地方：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 240,
      "start": 479.03,
      "end": 480.2,
      "text": "第一次拿的時候，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 241,
      "start": 480.2,
      "end": 481.8,
      "text": "不要在網頁上按「下載」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 242,
      "start": 481.8,
      "end": 484.07,
      "text": "下載拿到的是一包死檔案，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 243,
      "start": 484.07,
      "end": 487.25,
      "text": "沒有紀錄、沒有歷史，改完也送不回去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 244,
      "start": 487.25,
      "end": 488.3,
      "text": "clone 拿到",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 245,
      "start": 488.3,
      "end": 490.49,
      "text": "的才是連同整本紀錄的完整專案。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 246,
      "start": 490.49,
      "end": 493.73,
      "text": "合作的循環就是四步：拉下來、改、留點、",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 247,
      "start": 493.73,
      "end": 494.63,
      "text": "送上去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 248,
      "start": 494.63,
      "end": 496.74,
      "text": "現在，那個「別人」常常不是人，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 249,
      "start": 496.74,
      "end": 498.17,
      "text": "而是另一個 AI。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 250,
      "start": 498.17,
      "end": 499.29,
      "text": "而 AI 不會跟",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 251,
      "start": 499.29,
      "end": 501.81,
      "text": "你說一聲它拉了什麼、改了什麼。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 252,
      "start": 501.81,
      "end": 503.63,
      "text": "然後就會遇到最麻煩的那一種：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 253,
      "start": 503.63,
      "end": 504.99,
      "text": "兩邊改到同一個地方。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 254,
      "start": 504.99,
      "end": 506.83,
      "text": "Git 這時候會停下來，跳出",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 255,
      "start": 506.83,
      "end": 508.92,
      "text": "conflict，中文叫衝突。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 256,
      "start": 508.92,
      "end": 510.25,
      "text": "意思很直白：同一段",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 257,
      "start": 510.25,
      "end": 512.24,
      "text": "內容出現了兩個不同的版本，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 258,
      "start": 512.24,
      "end": 514.99,
      "text": "它不知道該聽誰的，所以它不猜，它問你。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 259,
      "start": 514.99,
      "end": 517.63,
      "text": "現在的 AI 遇到衝突通常會自己處理。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 260,
      "start": 517.63,
      "end": 519.79,
      "text": "它會看懂兩邊各自想做什麼，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 261,
      "start": 519.79,
      "end": 521.94,
      "text": "然後幫你合：有時候是二選一，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 262,
      "start": 521.94,
      "end": 523.38,
      "text": "有時候是兩邊都留，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 263,
      "start": 523.38,
      "end": 526.43,
      "text": "有時候是乾脆重寫一段把兩邊的功能接",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 264,
      "start": 526.43,
      "end": 526.89,
      "text": "起來。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 265,
      "start": 526.89,
      "end": 528.16,
      "text": "做完怎麼確認？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 266,
      "start": 528.16,
      "end": 530.72,
      "text": "這裡是我覺得最值得你記住的一件事。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 267,
      "start": 530.72,
      "end": 532.74,
      "text": "AI 卡住的時候其實很安全，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 268,
      "start": 532.74,
      "end": 534.35,
      "text": "因為它會停下來問你。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 269,
      "start": 534.35,
      "end": 535.88,
      "text": "危險的是它沒有卡住。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 270,
      "start": 535.88,
      "end": 538.9,
      "text": "它沒有你的產品規劃，它只看得到程式碼。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 271,
      "start": 538.9,
      "end": 540.83,
      "text": "所以它可能很順地選了一邊，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 272,
      "start": 540.83,
      "end": 542.6,
      "text": "而那一邊剛好是你不要的，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 273,
      "start": 542.6,
      "end": 544.48,
      "text": "然後回你一句「衝突已解決」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 274,
      "start": 544.48,
      "end": 545.91,
      "text": "畫面上什麼警告都沒有。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 275,
      "start": 545.91,
      "end": 547.15,
      "text": "所以合併完之後，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 276,
      "start": 547.15,
      "end": 549.1,
      "text": "你要問的不是「解決了嗎」，是：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 277,
      "start": 549.1,
      "end": 550.97,
      "text": "這次衝突你是怎麼解的？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 278,
      "start": 550.97,
      "end": 552.67,
      "text": "兩邊各自原本想做什麼，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 279,
      "start": 552.67,
      "end": 554.31,
      "text": "你留了哪一邊、為什麼？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 280,
      "start": 554.31,
      "end": 557.56,
      "text": "重點不是它答不答得出來，是它講的那兩邊",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 281,
      "start": 557.56,
      "end": 558.93,
      "text": "，你自己各試一次。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 282,
      "start": 558.93,
      "end": 561.86,
      "text": "少了一邊，就叫它重做。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 283,
      "start": 561.86,
      "end": 564.02,
      "text": "接下來會發生一件很自然的事：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 284,
      "start": 564.02,
      "end": 565.45,
      "text": "你會想同時開兩個。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 285,
      "start": 565.45,
      "end": 567.55,
      "text": "一個在幫你改版面，你在旁邊等，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 286,
      "start": 567.55,
      "end": 570.44,
      "text": "你會想那我為什麼不順便開另一個去處理",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 287,
      "start": 570.44,
      "end": 570.86,
      "text": "別的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 288,
      "start": 570.86,
      "end": 572.07,
      "text": "問題在於，這兩個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 289,
      "start": 572.07,
      "end": 574.32,
      "text": "視窗會直接改同一個資料夾，而",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 290,
      "start": 574.32,
      "end": 575.45,
      "text": "Git 不會攔。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 291,
      "start": 575.45,
      "end": 576.76,
      "text": "剛剛那個衝突警告，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 292,
      "start": 576.76,
      "end": 578.99,
      "text": "只在合併兩份紀錄時才會出現。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 293,
      "start": 578.99,
      "end": 581.66,
      "text": "同一份東西，兩個人同時在上面動手，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 294,
      "start": 581.66,
      "end": 583.72,
      "text": "這件事你在辦公室裡見過。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 295,
      "start": 583.72,
      "end": 587.17,
      "text": "兩個人各自打開同一份共用檔案，各自改，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 296,
      "start": 587.17,
      "end": 587.88,
      "text": "各自存。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 297,
      "start": 587.88,
      "end": 589.02,
      "text": "最後存的那個人，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 298,
      "start": 589.02,
      "end": 590.9,
      "text": "蓋掉前一個人的所有修改。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 299,
      "start": 590.9,
      "end": 592.71,
      "text": "而前一個人不會收到通知，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 300,
      "start": 592.71,
      "end": 595.66,
      "text": "他要到很久以後才會發現自己那半天不見",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 301,
      "start": 595.66,
      "end": 598.14,
      "text": "了。 在專案裡一樣，只是更難察覺，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 302,
      "start": 598.14,
      "end": 599.62,
      "text": "因為兩邊都是 AI，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 303,
      "start": 599.62,
      "end": 601.76,
      "text": "它們不會抬頭跟你說一聲。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 304,
      "start": 601.76,
      "end": 602.76,
      "text": "這時候 AI 可能",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 305,
      "start": 602.76,
      "end": 604.44,
      "text": "會問你要不要開一個分支。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 306,
      "start": 604.44,
      "end": 606.8,
      "text": "分支的意思是「跟正本隔開來做」，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 307,
      "start": 606.8,
      "end": 608.54,
      "text": "改壞了整條丟掉就好。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 308,
      "start": 608.54,
      "end": 611.72,
      "text": "那是好東西，但它解決不了現在這個問題。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 309,
      "start": 611.72,
      "end": 612.87,
      "text": "因為分支再多，你",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 310,
      "start": 612.87,
      "end": 615.49,
      "text": "電腦上那個資料夾還是只有一個，兩個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 311,
      "start": 615.49,
      "end": 617.72,
      "text": "AI 還是站在同一張桌子前面。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 312,
      "start": 617.72,
      "end": 620.65,
      "text": "真正解決這件事的做法只有一個：給第二個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 313,
      "start": 620.65,
      "end": 622.05,
      "text": "AI 第二個資料夾。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 314,
      "start": 622.05,
      "end": 623.65,
      "text": "這個做法叫 worktree。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 315,
      "start": 623.65,
      "end": 625.92,
      "text": "它在你硬碟上多開一個資料夾，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 316,
      "start": 625.92,
      "end": 627.31,
      "text": "裝的是同一個專案，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 317,
      "start": 627.31,
      "end": 629.16,
      "text": "但跟原本那個各自獨立。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 318,
      "start": 629.16,
      "end": 631.48,
      "text": "一個 AI 待一個，互不干擾。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 319,
      "start": 631.48,
      "end": 632.76,
      "text": "做完怎麼確認？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 320,
      "start": 632.76,
      "end": 634.05,
      "text": "分別問這兩個 AI：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 321,
      "start": 634.05,
      "end": 635.6,
      "text": "你現在在哪個資料夾？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 322,
      "start": 635.6,
      "end": 638.09,
      "text": "兩個答案不一樣，才是真的分開了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 323,
      "start": 638.09,
      "end": 639.54,
      "text": "沒做到的時候會發生什麼，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 324,
      "start": 639.54,
      "end": 641.23,
      "text": "我們是用最貴的方式知道的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 325,
      "start": 641.23,
      "end": 642.87,
      "text": "有一次，我們有兩個 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 326,
      "start": 642.87,
      "end": 645.49,
      "text": "同時在做事，而它們沒有各自的資料夾，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 327,
      "start": 645.49,
      "end": 646.57,
      "text": "用的是同一個。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 328,
      "start": 646.57,
      "end": 649.01,
      "text": "其中一個想看「原本的版本長什麼樣」，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 329,
      "start": 649.01,
      "end": 650.24,
      "text": "就下了兩道指令。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 330,
      "start": 650.24,
      "end": 651.39,
      "text": "這兩道指令，一個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 331,
      "start": 651.39,
      "end": 653.46,
      "text": "人單獨工作的時候完全正常。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 332,
      "start": 653.46,
      "end": 655.06,
      "text": "你不用會下這兩道指令，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 333,
      "start": 655.06,
      "end": 657.77,
      "text": "你只要知道它們做了什麼：把桌面收乾淨，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 334,
      "start": 657.77,
      "end": 659.95,
      "text": "然後把資料夾換成另一個版本。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 335,
      "start": 659.95,
      "end": 661.71,
      "text": "但那天不是一個人在工作。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 336,
      "start": 661.71,
      "end": 664.37,
      "text": "那兩道指令的作用範圍，涵蓋了另一個",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 337,
      "start": 664.37,
      "end": 666.14,
      "text": "AI還沒有存好的東西。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 338,
      "start": 666.14,
      "end": 669.03,
      "text": "大約五百七十行被掃掉了，是另一個 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 339,
      "start": 669.03,
      "end": 670.66,
      "text": "還沒留下紀錄的工作。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 340,
      "start": 670.66,
      "end": 671.67,
      "text": "而它不會報錯。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 341,
      "start": 671.67,
      "end": 674.86,
      "text": "指令成功執行，畫面上什麼都沒有。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 342,
      "start": 674.86,
      "end": 677.1,
      "text": "要等到另一邊回頭找自己的東西，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 343,
      "start": 677.1,
      "end": 677.84,
      "text": "才會發現。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 344,
      "start": 677.84,
      "end": 679.0,
      "text": "如果那個人是你，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 345,
      "start": 679.0,
      "end": 681.42,
      "text": "你的第一個念頭會是自己記錯了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 346,
      "start": 681.42,
      "end": 683.65,
      "text": "所以這一段你要帶走的只有一句：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 347,
      "start": 683.65,
      "end": 684.77,
      "text": "不要讓兩個 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 348,
      "start": 684.77,
      "end": 686.47,
      "text": "在同一個資料夾裡動手。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 349,
      "start": 686.47,
      "end": 688.67,
      "text": "我要同時開兩個來做不同的事，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 350,
      "start": 688.67,
      "end": 691.04,
      "text": "幫我各開一個獨立的工作資料夾，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 351,
      "start": 691.04,
      "end": 693.63,
      "text": "不要讓它們共用同一個。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 352,
      "start": 693.63,
      "end": 696.0,
      "text": "最後講你每天都在怕的那一刻：AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 353,
      "start": 696.0,
      "end": 697.37,
      "text": "真的把東西改壞了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 354,
      "start": 697.37,
      "end": 699.8,
      "text": "分兩種情況，而且分法只有一個問題：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 355,
      "start": 699.8,
      "end": 701.35,
      "text": "你有沒有留過點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 356,
      "start": 701.35,
      "end": 702.86,
      "text": "第一種，你還沒留點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 357,
      "start": 702.86,
      "end": 704.57,
      "text": "AI 剛剛改了一堆檔案，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 358,
      "start": 704.57,
      "end": 706.04,
      "text": "你跑起來完全不對。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 359,
      "start": 706.04,
      "end": 708.19,
      "text": "這時候的動作叫 restore，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 360,
      "start": 708.19,
      "end": 710.95,
      "text": "意思是把這些還沒留過點的改動全部丟掉，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 361,
      "start": 710.95,
      "end": 711.97,
      "text": "回到上一個點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 362,
      "start": 711.97,
      "end": 713.9,
      "text": "就當剛剛那半小時沒發生過。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 363,
      "start": 713.9,
      "end": 715.75,
      "text": "第二種，你已經留過點了，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 364,
      "start": 715.75,
      "end": 717.89,
      "text": "而且是那個點本身有問題。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 365,
      "start": 717.89,
      "end": 720.05,
      "text": "這時候比較安全的做法叫 revert。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 366,
      "start": 720.05,
      "end": 722.41,
      "text": "它不是把歷史刪掉，是再記一筆，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 367,
      "start": 722.41,
      "end": 724.51,
      "text": "內容是把前面那筆抵消掉。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 368,
      "start": 724.51,
      "end": 725.72,
      "text": "為什麼要繞這一圈？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 369,
      "start": 725.72,
      "end": 727.2,
      "text": "因為直接刪掉歷史的話，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 370,
      "start": 727.2,
      "end": 729.42,
      "text": "跟你一起做的人手上版本會對不上，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 371,
      "start": 729.42,
      "end": 731.29,
      "text": "而且他不會知道發生過什麼。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 372,
      "start": 731.29,
      "end": 734.65,
      "text": "多記一筆抵消，所有人都看得到「加錯了、",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 373,
      "start": 734.65,
      "end": 736.02,
      "text": "然後被抵消了」。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 374,
      "start": 736.02,
      "end": 737.84,
      "text": "這兩個你都不用記，你只要說：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 375,
      "start": 737.84,
      "end": 739.51,
      "text": "剛剛這次的改動我不要了，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 376,
      "start": 739.51,
      "end": 741.59,
      "text": "請幫我回到上一個正常的版本。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 377,
      "start": 741.59,
      "end": 743.55,
      "text": "AI 會自己看現在的狀態，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 378,
      "start": 743.55,
      "end": 744.9,
      "text": "決定該用哪一個。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 379,
      "start": 744.9,
      "end": 746.18,
      "text": "做完怎麼確認？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 380,
      "start": 746.18,
      "end": 749.34,
      "text": "這裡有兩件事是我覺得沒有人會先告訴你",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 381,
      "start": 749.34,
      "end": 751.57,
      "text": "的。 第一，restore 是不可逆的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 382,
      "start": 751.57,
      "end": 753.5,
      "text": "它丟掉的東西沒有回收桶。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 383,
      "start": 753.5,
      "end": 755.3,
      "text": "不像刪檔案還能去垃圾桶撿，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 384,
      "start": 755.3,
      "end": 757.24,
      "text": "那些改動是真的消失了，Git",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 385,
      "start": 757.24,
      "end": 758.74,
      "text": "裡面任何地方都找不到，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 386,
      "start": 758.74,
      "end": 760.78,
      "text": "因為它們從來沒有被記下來過。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 387,
      "start": 760.78,
      "end": 762.78,
      "text": "剛剛那五百七十行其實不是這一種。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 388,
      "start": 762.78,
      "end": 764.14,
      "text": "那次是被暫時收起來，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 389,
      "start": 764.14,
      "end": 765.96,
      "text": "還找得回來；restore",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 390,
      "start": 765.96,
      "end": 767.89,
      "text": "丟掉的才是真的沒有回收桶。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 391,
      "start": 767.89,
      "end": 769.54,
      "text": "但兩次的傷害是同一種：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 392,
      "start": 769.54,
      "end": 771.53,
      "text": "做那件事的不是壞掉的程式，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 393,
      "start": 771.53,
      "end": 773.01,
      "text": "是收東西的動作本身，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 394,
      "start": 773.01,
      "end": 774.93,
      "text": "而你不會知道要去哪裡找。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 395,
      "start": 774.93,
      "end": 777.31,
      "text": "所以在說「回到上一個正常版本」之前，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 396,
      "start": 777.31,
      "end": 778.26,
      "text": "值得多問一句：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 397,
      "start": 778.26,
      "end": 780.9,
      "text": "這個動作會丟掉哪些還沒記錄的改動？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 398,
      "start": 780.9,
      "end": 781.68,
      "text": "先列給我看。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 399,
      "start": 781.68,
      "end": 784.03,
      "text": "第二件是他們很少講的第三種情況：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 400,
      "start": 784.03,
      "end": 785.38,
      "text": "東西已經送出去了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 401,
      "start": 785.38,
      "end": 787.58,
      "text": "這時候光救你自己的電腦沒有用，要連",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 402,
      "start": 787.58,
      "end": 789.61,
      "text": "GitHub 上那一份一起處理。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 403,
      "start": 789.61,
      "end": 792.1,
      "text": "你問 AI 的時候要把這件事講出來：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 404,
      "start": 792.1,
      "end": 793.92,
      "text": "「這批改動我已經推上去了，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 405,
      "start": 793.92,
      "end": 794.92,
      "text": "也要一起處理。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 406,
      "start": 794.92,
      "end": 796.59,
      "text": "」所以這一章的判準是：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 407,
      "start": 796.59,
      "end": 798.5,
      "text": "在說「回到上一個版本」之前，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 408,
      "start": 798.5,
      "end": 800.8,
      "text": "先問它會丟掉什麼。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 409,
      "start": 800.8,
      "end": 803.11,
      "text": "救回來之後還有最後一件事，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 410,
      "start": 803.11,
      "end": 805.04,
      "text": "而且跟前面幾章不一樣：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 411,
      "start": 805.04,
      "end": 808.13,
      "text": "前面都是事情沒到，這次是事情做到了，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 412,
      "start": 808.13,
      "end": 809.19,
      "text": "但份量不對。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 413,
      "start": 809.19,
      "end": 811.26,
      "text": "這是我踩過最容易被騙的一次。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 414,
      "start": 811.26,
      "end": 814.28,
      "text": "有一次我叫 AI 算給我看它改了多少。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 415,
      "start": 814.28,
      "end": 817.12,
      "text": "它回我：刪掉兩千六百二十一行。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 416,
      "start": 817.12,
      "end": 818.26,
      "text": "兩千六百多行。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 417,
      "start": 818.26,
      "end": 820.82,
      "text": "而我心裡預期的是幾十行。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 418,
      "start": 820.82,
      "end": 822.71,
      "text": "我們當時真的停下來查了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 419,
      "start": 822.71,
      "end": 825.17,
      "text": "實際上那次刪掉的是三十行。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 420,
      "start": 825.17,
      "end": 827.4,
      "text": "比對兩個版本有兩種算法。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 421,
      "start": 827.4,
      "end": 829.56,
      "text": "一種是拿兩邊現在的樣子直接比。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 422,
      "start": 829.56,
      "end": 832.0,
      "text": "另一種是先回到你們還一樣的時候，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 423,
      "start": 832.0,
      "end": 834.05,
      "text": "再從那裡往後算你改了什麼。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 424,
      "start": 834.05,
      "end": 836.25,
      "text": "當你這一份比正本少了幾次更新，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 425,
      "start": 836.25,
      "end": 838.93,
      "text": "第一種算法會把別人後來加進去的東西，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 426,
      "start": 838.93,
      "end": 840.29,
      "text": "全部算成你刪掉的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 427,
      "start": 840.29,
      "end": 843.2,
      "text": "你手上沒有，於是它就被記成你刪的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 428,
      "start": 843.2,
      "end": 844.05,
      "text": "而你看不出來。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 429,
      "start": 844.05,
      "end": 846.51,
      "text": "兩個數字長得一模一樣，都是「刪掉 N",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 430,
      "start": 846.51,
      "end": 848.8,
      "text": "行」，沒有任何東西告訴你這兩個 N",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 431,
      "start": 848.8,
      "end": 849.73,
      "text": "的意思不同。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 432,
      "start": 849.73,
      "end": 852.0,
      "text": "判準是最好記的一個：不要自己算，看",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 433,
      "start": 852.0,
      "end": 854.22,
      "text": "GitHub 自己算的那個數字。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 434,
      "start": 854.22,
      "end": 855.3,
      "text": "GitHub 在",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 435,
      "start": 855.3,
      "end": 857.46,
      "text": "每一個提案上都會顯示改了多少，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 436,
      "start": 857.46,
      "end": 860.02,
      "text": "那個數字用的是第二種算法，是權威值。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 437,
      "start": 860.02,
      "end": 862.26,
      "text": "這個 PR 在 GitHub",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 438,
      "start": 862.26,
      "end": 865.2,
      "text": "上顯示的新增跟刪除行數是多少？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 439,
      "start": 865.2,
      "end": 867.29,
      "text": "跟我預期改的份量對不對得上？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 440,
      "start": 867.29,
      "end": 868.1,
      "text": "對得上就過。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 441,
      "start": 868.1,
      "end": 870.59,
      "text": "對不上，那才是真的要查的時候。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 442,
      "start": 870.59,
      "end": 872.94,
      "text": "你不用背數字，你只要拿它報的份量，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 443,
      "start": 872.94,
      "end": 874.76,
      "text": "跟你交代它做的事比一下。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 444,
      "start": 874.76,
      "end": 877.91,
      "text": "明顯不成比例，就值得問一句。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 445,
      "start": 877.91,
      "end": 879.26,
      "text": "AI 問你的那幾句話，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 446,
      "start": 879.26,
      "end": 880.7,
      "text": "你現在都答得出來了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 447,
      "start": 880.92,
      "end": 881.9,
      "text": "AI沒有騙你。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 448,
      "start": 881.9,
      "end": 883.36,
      "text": "那兩種算法都是對的，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 449,
      "start": 883.36,
      "end": 885.0,
      "text": "它們回答的是不同的問題。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 450,
      "start": 885.0,
      "end": 886.88,
      "text": "AI挑了比較常見的那一種，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 451,
      "start": 886.88,
      "end": 888.74,
      "text": "而它不知道你要問的是另一個。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 452,
      "start": 888.74,
      "end": 890.44,
      "text": "其實這支片講的三次，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 453,
      "start": 890.44,
      "end": 893.42,
      "text": "全部是同一個形狀：沒有一次是AI亂來，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 454,
      "start": 893.42,
      "end": 896.0,
      "text": "每一次都是它做的事情跟你以為它在做的",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 455,
      "start": 896.0,
      "end": 897.77,
      "text": "事情，中間差了一層。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 456,
      "start": 897.77,
      "end": 899.08,
      "text": "要不要 commit，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 457,
      "start": 899.08,
      "end": 901.37,
      "text": "問的是值不值得留一個回得去的點。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 458,
      "start": 901.37,
      "end": 902.48,
      "text": "要不要開分支，問",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 459,
      "start": 902.48,
      "end": 904.48,
      "text": "的是要不要跟正本隔開來做。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 460,
      "start": 904.48,
      "end": 905.54,
      "text": "要不要發 PR，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 461,
      "start": 905.54,
      "end": 907.59,
      "text": "問的是要不要正式提出去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 462,
      "start": 907.59,
      "end": 909.66,
      "text": "但我更想留給你的是另一半。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 463,
      "start": 909.66,
      "end": 912.41,
      "text": "這支片每一個動作我都多講了一句「做完",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 464,
      "start": 912.41,
      "end": 913.39,
      "text": "怎麼確認」，因為",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 465,
      "start": 913.39,
      "end": 915.66,
      "text": "那才是這套工具對你真正的用處：",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 466,
      "start": 915.66,
      "end": 918.51,
      "text": "東西是還在我電腦上，還是已經送出去了？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 467,
      "start": 918.51,
      "end": 920.67,
      "text": "我送去的那個地方，還收不收？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 468,
      "start": 920.67,
      "end": 923.14,
      "text": "兩個 AI 有沒有共用同一個資料夾？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 469,
      "start": 923.14,
      "end": 925.69,
      "text": "它給我的份量，跟我以為的對得上嗎？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 470,
      "start": 925.69,
      "end": 928.53,
      "text": "四個問題，你不用會做，你只要會問。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 471,
      "start": 928.53,
      "end": 930.1,
      "text": "對不寫程式的人來說，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 472,
      "start": 930.1,
      "end": 933.23,
      "text": "版本控制真正的價值不是多學會一個工具，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 473,
      "start": 933.23,
      "end": 935.93,
      "text": "是它把 AI 做的事情變成看得見的。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 474,
      "start": 935.93,
      "end": 938.61,
      "text": "在那之前，AI 說完成了你只能相信；",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 475,
      "start": 938.61,
      "end": 940.32,
      "text": "有了之後，你可以去看。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 476,
      "start": 940.32,
      "end": 943.35,
      "text": "而這個差別會決定你敢不敢把更大的事情",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 477,
      "start": 943.35,
      "end": 943.96,
      "text": "交出去。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 478,
      "start": 943.96,
      "end": 945.18,
      "text": "你敢交，是因為你",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 479,
      "start": 945.18,
      "end": 947.55,
      "text": "知道出事了退得回來、看得出來。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 480,
      "start": 947.55,
      "end": 949.84,
      "text": "這才是時間真正省下來的地方。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 481,
      "start": 949.84,
      "end": 952.28,
      "text": "你不會因為看完這支影片就不再踩到，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 482,
      "start": 952.28,
      "end": 953.44,
      "text": "我到現在還是會。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 483,
      "start": 953.44,
      "end": 955.67,
      "text": "差別在於現在我知道要去哪裡看。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 484,
      "start": 955.67,
      "end": 957.61,
      "text": "如果你想把這幾個檢查變成習慣，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 485,
      "start": 957.61,
      "end": 960.11,
      "text": "我在免費社群裡整理了一份可以直接貼給",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 486,
      "start": 960.11,
      "end": 961.08,
      "text": "AI 的檢查清單，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 487,
      "start": 961.08,
      "end": 962.98,
      "text": "就是這支影片講的這四個問題。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 488,
      "start": 962.98,
      "end": 964.41,
      "text": "連結在資訊欄，網址是",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 489,
      "start": 964.41,
      "end": 965.68,
      "text": "guccidgi.",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 490,
      "start": 965.68,
      "end": 967.21,
      "text": "com/aifree。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 491,
      "start": 967.21,
      "end": 969.64,
      "text": "不過在你去看之前，先做一件事。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 492,
      "start": 969.64,
      "end": 971.17,
      "text": "打開你手邊那個 AI",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 493,
      "start": 971.17,
      "end": 972.7,
      "text": "幫你做到一半的東西，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 494,
      "start": 972.7,
      "end": 975.59,
      "text": "問它一句：這些改動現在只在我的電腦上，",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 495,
      "start": 975.59,
      "end": 976.88,
      "text": "還是已經上去了？",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 496,
      "start": 976.88,
      "end": 977.73,
      "text": "那一次就夠了。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    },
    {
      "id": 497,
      "start": 977.73,
      "end": 979.0,
      "text": "你會知道我在講什麼。",
      "source": "video_source_subtitle",
      "authority": "video_source_subtitle"
    }
  ],
  "transcript_selection": {
    "schema": "videonote.transcript_selection.v1",
    "status": "SELECTED",
    "requested_language": "zh",
    "duration": 979.0,
    "reference_path": "/Users/sagawa/AI_WORK/video_notes/url/20260910_192224__AI_改壞了只能整個重做_不用_非技術人員_Vibe_Coding_必學的_GitHub/reference_subtitle.vtt",
    "reference_kind": "manual",
    "reference_language": "zh-TW",
    "selected_source": "video_source_subtitle",
    "source_caption_kind": "manual",
    "source_caption_processing": "verbatim_direct",
    "youtube_overlap_clamps": [],
    "general_high_confidence_repairs": [],
    "decision_reason": "complete_source_subtitle_fast_path_no_whisper",
    "whisper_rejected": false,
    "source_profile": {
      "segment_count": 498,
      "duration_coverage": 0.998744
    }
  }
}