【Git】版本控制基本指令

更新於 發佈於 閱讀時間約 6 分鐘

前言

最近剛換新公司,重新準備自己的開發環境。以前被圖形化介面慣壞了,日常操作都是在Sourcetree介面上滑鼠點一點就可以完事,只有遇到特殊的狀況才會找指令解。

現在的公司用的是TortoiseGit,除了解衝突、看分支差異比對方便以外,我反而寧可回歸下指令。


本篇就記錄一下在Git Bash上的入門操作,加深理解對這套工具的認識。


何謂版本控制

編輯記錄

編輯記錄

以方格子來說,每一段時間系統會自動幫你的文章做存檔,避免編輯資料遺失,並且以時間戳記作為版本命名。因此,我隨時都可以回復到以前暫存時間點,再次接續進行編輯。


Git Repository

Repository有被翻譯為程式庫、倉庫、儲存庫,具體一點可以是電腦上的某個資料夾。我們可以透過git來追蹤控管這個資料夾內所有文件的變化,就如同方格子對這篇文章的編輯時間點作紀錄一樣。


首先,建立一個git-demo的資料夾作為repository,並且切換路徑位置到資料夾內。


注意這時候還只是一般的資料夾(目錄),裡面什麼都沒有


建立資料夾

建立資料夾

執行git init,讓git初始化該資料夾,變成repository。


git完成初始化的作業,產生預設的主分支(master),同時生成一個.git資料夾,裡面存放所有控管的資料參考。

raw-image


到這裡為止可以先歸納幾件事:

  1. git 是一項版本控制工具
  2. 初始化資料夾生成.git檔,用來追蹤文件變化,如果被刪除就會變回一般資料夾
  3. .開頭命名的檔案是隱藏檔,需要變更資料夾的顯示設定才能看到

Git Commit

每一筆commit(提交紀錄)可以理解為一次的存檔,作為範例我會新增一個檔案,並且把它紀錄下來。不過在這之前可以先使用git status查看當前狀態​。

沒有提交項目,系統也提醒作檔案異動後使用git add加入追蹤

沒有提交項目,系統也提醒作檔案異動後使用git add加入追蹤


建立檔案後,再查看一下git status -s,只看縮寫版的狀態。

系統提示file1.txt未被加入追蹤

系統提示file1.txt未被加入追蹤

執行git add .將所有檔案加入至暫存區。其中.代表當前資料夾,也可以各別指定加入的檔案名稱。

系統提示檔案加入至暫存區,等待提交

系統提示檔案加入至暫存區,等待提交


使用git commit提交本次所有的異動,描述一下這次改了哪些東西。沒有帶-m的指令會開啟編輯器。或者使用git commit -m "<提交訊息描述>"

編輯器預設使用vim,可以另外修改成自己習慣的編輯器
raw-image


完成提交後可以再查看一下狀態,確認沒有新的異動。

raw-image


Git Log

在眾多圖形化介面,最方便的就是可以看到美美的線圖,尤其是越大型的專案,亂七八糟的紀錄完全是門藝術。透過指令同樣可以做到簡易版的呈現,明確來說是照自己的意思只顯示必要的項目,例如git log --oneline --graph -5

以單行顯示歷程,提供線圖,只要最新5筆紀錄

以單行顯示歷程,提供線圖,只要最新5筆紀錄

Github

寫到這裡差不多要做結尾了,也許會有初學者問:github呢?


蠻意外的是,還真有不少人分不太清楚兩者間的關係,但在工作上一樣知道怎麼走完流程。有些公司用的是gitlab,一樣都是git開頭,難道不都是git嗎?


示意圖

示意圖

前面我們已經會在自己電腦建立git repository了,而且進行修改紀錄追蹤,直白一點說就是進行存檔。


今天如果需要多人協作,分別在不同的電腦一起編輯這個專案資料夾,就會需要在遠端的伺服器上也建立一個git repository,隨時與自己電腦的repository進行同步(push/pull),確保狀態的一致。


遠端伺服器常見的方案有Github、Gitlab、Bitbucket等等,除了可以在上面進行git相關功能操作外,額外多了權限控管、CI/CD流程等串接,因此跟純粹只有版本控制概念的git工具來說是兩回事。


總結

  1. 創建: git init
  2. 查狀態: git status
  3. 看歷程: git log
  4. 加入暫存: git add
  5. 提交暫存: git commit


後記

工作上從遠端的master clone下來整包專案的一周後,git status告訴我commit點落後400多項更新,於是照以往習慣定期同步遠端master。怪了,竟然連master 都可以pull失敗,究竟是發生了什麼事? 只好上stackoverflow找找可行的解法。


問題

執行git pull origin master

錯誤訊息

error: cannot lock ref 'refs/remotes/origin/xxx': ref xxx is at OOO expected XXX

解法

git gc --prune=now
git remote prune origin
git pull origin master


只知道遠端其實有很多沒砍掉的分支,大多數人處理方式也直接-f(--force)了事,因此才會需要下prune相關指令去更新這些分支的本地及遠端的ref,也算是學到了一課。


留言
avatar-img
留言分享你的想法!
avatar-img
Err500
12會員
76內容數
遇到的坑、解過的題、新知識的探索、舊時代的遺毒!? 工作後我發現,文件更新往往跟不上新需求的更迭,犯錯的歷史總是不斷重演。因此,我改變了方式,蒐集從程式上、系統上的每一次異常處理過程,好讓再次遇到相同的問題時能快速應變。此專題就是我的錯題本,期待日後不管在工作上或交流上遇到難題,都能輕鬆地應答:有什麼難的,我都踩過。
Err500的其他內容
2025/02/21
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
Thumbnail
2025/02/21
本文介紹瞭如何在Windows系統中,透過設定.bashrc文件輕量級地配置JDK環境變數,解決不同專案使用不同JDK版本的問題,並涵蓋了環境變數的概念、用途及其他注意事項。
Thumbnail
2025/02/03
說明如何修改 bash 的顯示設定
Thumbnail
2025/02/03
說明如何修改 bash 的顯示設定
Thumbnail
2024/10/09
今天在解衝突的時候,同事提到了做merge指令時跟在Gitlab上提交merge request的時候是情況是相反的,我想他或許也沒探究過原因。 曾經我也很疑惑為什麼大家都是說發PR,但是越想越不對勁: PR的P指的是pull,為什麼是用拉pull而不是用推push?
2024/10/09
今天在解衝突的時候,同事提到了做merge指令時跟在Gitlab上提交merge request的時候是情況是相反的,我想他或許也沒探究過原因。 曾經我也很疑惑為什麼大家都是說發PR,但是越想越不對勁: PR的P指的是pull,為什麼是用拉pull而不是用推push?
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
Thumbnail
這篇文章將介紹工程師使用版控和git的相關知識和技能,包括版本控制的意義和git的基本指令,以及開發流程和webhook的概念。
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
最近在找資料的時候,偶然發現了兩個有趣的 git 指令:git commit --fixup 和 git rebase -i <sha> --autosquash。 研究了下發現對於像我這種每次 commit 都要斤斤計較,盡可能完美的人來說非常好用,因此寫一篇筆記記錄一下用法。
Thumbnail
本文將介紹Gitlab與GitHub的差異,以及在本地環境部署Gitlab的流程與實作。文章內容包括版本管理系統的選擇,Gitlab的基本功能,以及使用Docker進行部署的詳細步驟。
Thumbnail
本文將介紹Gitlab與GitHub的差異,以及在本地環境部署Gitlab的流程與實作。文章內容包括版本管理系統的選擇,Gitlab的基本功能,以及使用Docker進行部署的詳細步驟。
Thumbnail
在 Ubuntu 22.04 上使用 GitLab,請依照下列步驟操作。首先,使用nano文字編輯器開啟「gitlab.rb」檔案並尋找存取GitLab的URL: sudo nano /etc/gitlab/gitlab.rb 到下面的連結以使用 Ubuntu 22.04 上的 GitL
Thumbnail
在 Ubuntu 22.04 上使用 GitLab,請依照下列步驟操作。首先,使用nano文字編輯器開啟「gitlab.rb」檔案並尋找存取GitLab的URL: sudo nano /etc/gitlab/gitlab.rb 到下面的連結以使用 Ubuntu 22.04 上的 GitL
Thumbnail
GitLab 是一個 DevOps、基於 Web 的免費開源平台 Git 儲存庫,為開發人員提供了所有必要的功能。它是一個用於開發 DevOps 應用程式的一體式平台。 GitLab 允許您執行原始碼管理、監控、安全性和專案規劃任務。 Update system packages: sudo
Thumbnail
GitLab 是一個 DevOps、基於 Web 的免費開源平台 Git 儲存庫,為開發人員提供了所有必要的功能。它是一個用於開發 DevOps 應用程式的一體式平台。 GitLab 允許您執行原始碼管理、監控、安全性和專案規劃任務。 Update system packages: sudo
Thumbnail
前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
Thumbnail
前言 上次我們講到 CI/CD 中的 when 使用,今天我們要來傳授一套必殺技,我們要把過去所學的全部融合再一起,相信各位都準備好了,將 Gitlab 從枷鎖中解放出來吧,讓我們來詠唱「武裝完全支配術」 「System Call. Connect Armament. Search Archiv
Thumbnail
npm 做為 node 套件版本管理工具,今天來學習如何使用 npm 升級 package.json 版號管理,可以對一個專案版號管理更加制式化 major 目標升級版號 指令 npm version --new-version major 範例 v1.0.0 -> v2.0.0 mi
Thumbnail
npm 做為 node 套件版本管理工具,今天來學習如何使用 npm 升級 package.json 版號管理,可以對一個專案版號管理更加制式化 major 目標升級版號 指令 npm version --new-version major 範例 v1.0.0 -> v2.0.0 mi
Thumbnail
此篇教學 : 使用GitHub架設免費的部落格網站,輕鬆擁有自己的Blog雛型,記錄生活點滴。
Thumbnail
此篇教學 : 使用GitHub架設免費的部落格網站,輕鬆擁有自己的Blog雛型,記錄生活點滴。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News