0. 前言
在使用 Git 時有一種感覺就是隻會
add | commit | push
三個命令。因為這三個命令似乎足以把程式碼提交到 GitHub 上,即使是碰到某個問題,也可以直接 Google。但是對於其中的邏輯和版本管理的精髓沒有體會到,而只是作為一個線上程式碼倉庫在使用,這樣做也沒有什麼不可以,但是如果能系統的瞭解為什麼要有版本管理工具,以及版本管理工具能夠給我們提供怎麼樣的管理服務,對於使用工具的我們來說有很大幫助。不用記住命令,只是以後遇到問題時知道這個工具有實現的方式就足夠了。現在我係統的看了一下官方的 Git 入門教程 Git 官方教程(中字) 裡面通過描述對命令的使用情景進而選擇命令進行操作的方式,使得命令很容易理解也容易加深記憶。比起單一的命令用文字解釋這種方式,對於不熟悉 Git 的人來說是十分友好的。但是,看完容易忘,所以寫了這篇整理筆記用作輔助查詢。
1. 基本命令
1.1 瞭解幫助命令
git help
: 檢視命令git help add
: 檢視git add
命令的具體解釋
1.2 倉庫初始化
git init
: 建立.git
, 適合在已存在專案追加版本控制git init projectname
: 建立projectname/.git
, 適合專案開始時加入版本控制
1.3 檔案基本操作
git add filename/*
: 新增檔案[產生暫存檔案]git commmit -m "message"
: 將新增的檔案提交到本地倉庫[產生提交檔案]git rm filename
: 移除檔案,使用rm filename
的有暫存git add -u .
: 如果之前使用非 git 命令刪除檔案,可以使用這個命令把當前目錄的檔案重新遍歷清除git rm --cache filename
: 暫存但是不參與跟蹤git mv filepath newfilepath
: 移動檔案git rm filepath && git add newfilepath
: 移動檔案,之前使用非 git 命令移動檔案git add -A .
: 如果之前使用非 git 命令移動檔案,可以使用這個命令把當前目錄的檔案重新遍歷移動,和rm
命令類似git reset etc...
: 歷史提交管理(回退,合併...),checkout 更關注檔案
1.4 檢視檔案修改
git status
: 檢視檔案資訊git diff
: 檢視修改[工作樹和暫存檔案]git diff --staged
: 檢視修改[暫存檔案和最近提交檔案]git diff HEAD
: 檢視修改[工作樹和最近提交檔案]git diff --word-diff
: 檢視修改的單詞用顏色標出git diff --stat
: 檢視修改的檔名
參考資料 0. Git 學習(三)本地倉庫操作——git add & commit 瞭解 git 版本庫實現
1.5 檢視提交 Log
git log
: 顯示提交資訊git log --oneline
: 顯示提交 Messagegit log --stat
: 顯示提交檔名級詳細修改資訊git log --patch
: 顯示提交檔案內容級詳細修改資訊git log --graph
: 用圖顯示提交記錄git log --graph --all --decorate --oneline
: 去除冗餘資訊,更加直觀顯示每條分支每次提交git log --stat -- filename
: 檔案提交記錄(不記錄路徑移動)git log --stat -M --follow -- filename
: 看到完整的檔案操作過程
1.6 忽略檔案
touch .gitignore
: 建立檔案(次級目錄也可以建立)vim .gitignore
: 編輯檔案新增 ignore 檔案。*.log | tmp/ | .sass-cache etc...
git ls-files --others --ignored --exclude-standard
: 檢視被 ignore 的檔案git reflog
: 詳細修改日誌
1.7 分支操作
git branch branchname
: 建立分支git branch
: 顯示分支git branch -d branchname
: 刪除分支git branch -D branchname
: 刪除未合併分支git checkout branchname
: 切換分支git checkout commitID
: 工作樹切換到 commitID 時git checkout -- filename
: 清理掉最後一次提交內容git checkout -b branchname
: 建立新分支並且進入該分支git merge branchname
: 和並 branchname 分支到目前所在分支(合併時檔案衝突要手動解決)git merge --abort
: 清除工作目錄和暫存區git merge squash branchname
: 將合併的分支改變變成一個 commitgit rebase branchname
: 將當前分支歷史提交合併到 branchname 分支
1.8 遠端操作
git remote add origin https://github.com/accountname/projectname
git remote set-url origin newUrl
: 改變 URLgit remote rm origin
: 刪除git remote -v
: 檢視 URLgit fetch origin
: 抓取遠端分支,本地會有一個remotehostname/branchname
的分支,一般用於檢視夥伴程式碼git pull origin
: 和 fetch 類似,但是是取回遠端更新和本地合併。相當於先 fetch 再 merge。git push origin
: push 到遠端倉庫
參考資料 1. Git遠端操作詳解
2. 總結
其實在開始把 Git 整個命令流程學習下來之前,對 Git 理解十分淺顯,使用命令也是抱著試試看的心態,錯了搜尋解決方法重試,對了就不追究原因了。這種方式感覺更加浪費時間,而且很可能多次遇到重複問題。覺得以後學習某個東西還是得大概瞭解整個系統才好,想快速入門未嘗不可,但是閒下來的時候要去多問問為什麼,這樣有了巨集觀的概念,出了問題說不定能自己摸索著解決。還有一點,實踐確實是比單一的閱讀或看視訊更加記憶深刻,對命令的理解也是同理,所以最好都敲一遍。
多謝閱讀 ^_^