Git 命令總結,從零到熟悉(全)
什麼是 Git?
Git 是一個免費的開源分散式版本控制系統,它的設計目的是為了速度和效率的處理從小型到大型的專案;Git 可以幫我們管理我們的程式碼,記錄歷史,只要程式碼提交到 Git 上就永久不會丟失,可以隨時 “穿越”(回到之前的某一個版本);可以多端共享,團隊協作中,多個人操作了同一個檔案時,可以實現自動合併(模組化,元件化)、標記衝突,擁有強大的分支管理系統。
Git 與 SVN 的區別
SVN:集中式,需要一臺中央伺服器,所有程式碼的拉取和提交都是在中央伺服器,一旦中央伺服器或者網路出現故障,則不能拉取和提交程式碼,需要不斷去備份中央伺服器,防止程式碼丟失。
Git:分散式,有一箇中央伺服器的同時,每個開發者本地都有自己的本地倉庫,擁有完整的版本庫,不用擔心程式碼丟失,Git 儲存的是程式碼變化的快照,更新程式碼的速度要比 SVN 更快。
Git 安裝
Windows
Mac
- 如果安裝過 Xcode 自帶 Git,https://developer.apple.com/xcode/
- 可以安裝 Homebrew,是 wmac 的包管理器,https://brew.sh/,下面是兩款介面美化外掛:
- Oh My ZSH:http://ohmyz.sh/
- iTerm2:
Linux 命令
1、列印工作目錄
pwd
2、建立資料夾
mkdir 資料夾名
3、改變路徑
進入碟符:
cd d:
進入資料夾:
cd 資料夾名
回上一級目錄:
cd ..
進入某一個路徑:
cd 路徑
想要進入某一個不知道路徑的資料夾中,可以直接拖拽該檔案到命令視窗,會自動識別路徑。
4、檢視檔案列表
ls
ls -al
下面命令加了 -al
5、建立檔案
touch 檔名
6、移動檔案
mv 檔案/資料夾 路徑
將檔案或者資料夾移動到所輸入的路徑下。
7、檢視檔案內容
cat 檔名
8、刪除檔案 / 資料夾
rm -rf 資料夾名
rm 檔名
-rf
為遞迴刪除,後面加上 *
為引數會遞迴刪除整個資料夾的內容,rm -rf *
(慎用)。
9、清空命令視窗
clear
10、檢視命令歷史
直接在命令列中檢視:
history
將當前 Git 的命令歷史寫入檔案中:
history > 檔名
11、使用 vi 編輯器編輯檔案
vi 檔名
進入編輯模式:
i
進入命令模式:
Esc
儲存並退出:
:wq
強制退出:
:q!
12、使用命令編輯檔案
向檔案輸入內容:
echo 內容 > 檔名
向檔案追加內容:
echo 內容 >> 檔名
當使用 echo
編輯了一個不存在的檔案時,會建立一個新檔案並將內容編輯到檔案中,而 touch
建立的是空檔案。
Git 的本地操作
Git 在管理檔案時,所有檔案都具有三種狀態,已修改、已暫存、已提交。
Git 在本地倉庫中由三部分組成,工作區、暫存區、版本庫。
Git 管理的資料夾下都有一個名為 .git
的隱藏資料夾。
對應關係如下:
- 已修改 → 工作區
- 已暫存 → 暫存區(
.git
資料夾下的index
檔案中) - 已提交 → 版本庫
1、配置使用者
不配置使用者無法提交程式碼。
檢視配置資訊:
git config --list
配置使用者名稱:
git config --global user.name “你的名字”
配置郵箱:
git config --global user.email “你的郵箱”
2、初始化 Git 倉庫
在要初始化的資料夾下執行下面命令,告訴 Git 哪個資料夾被 Git 所管理,一個專案初始化一次,不能巢狀。
git init
3、檢視 Git 狀態
git status
檔案為紅色,代表有修改,檔名為綠色,代表已經加入暫存區。
4、新增到暫存區
git add 檔名
git add .
git add -A
.
和 -A
兩個引數均為全部提交到暫存區,.
只監控修改、新增檔案的變化,-A
監控修改、新增、刪除檔案。
5、刪除暫存區
git rm --cached 檔名
git rm --cached . -r
第一個命令是刪除某一個檔案的暫存區,當引數為 .
的時候刪除全部暫存區,所以需要加上代表遞迴刪除的引數 -r
。
6、提交到版本庫
從暫存區提交到版本庫:
git commit -m “版本資訊”
從工作區直接提交到版本庫(需要之前新增過暫存區):
git commit -a -m “版本資訊”
7、檢視提交日誌
git log
8、比較工作區、暫存區、版本庫
工作區和暫存區比較:
git diff
工作區和版本庫比較:
git diff 分支名
暫存區和版本庫比較:
git diff --cached
9、撤銷操作
git checkout 檔名
git checkout .
撤銷操作是將暫存區覆蓋到工作區,會放棄掉當前工作區修改的內容,. 引數是將整個暫存區覆蓋當前工作區,一旦撤銷就回不到之前的工作區了。
當不小心將當前工作區錯誤的程式碼提交到暫存區,可以使用下面命令將暫存區回滾到上一個暫存區,只可回滾一次。
git reset HEAD 檔名
10、回退版本
檢視所有的版本號:
git reflog
按版本號回退版本:
git reset --hard 版本號
回退到上一個版本:
git reset --hard HEAD^
回退某一個版本的檔案到工作區:
git checkout 版本號 檔名
回退版本會將當前版本庫選中的版本重新覆蓋暫存區和工作區。
11、分支操作
檢視分支:
git branch
Git 剛剛初始化管理的的資料夾必須有一次提交到版本庫(root-commit:根提交)以後才會有主分支 master,否則即使建立了新分支也無法切換回 master。
建立分支:
git branch 分支名
切換分支:
git checkout 分支名
建立並切換分支:
git checkout -b 分支名
刪除分支(需切換出要刪除的分支):
git branch -D 分支名
新建立的分支和主分支 master 還是同一個區域,新建的檔案只有提交到新分支的版本庫才真正脫離關係。
分支工作區有更改不能直接切換其他分支,可以提交更改或者暫存更改,若暫存更改(使用暫存區覆蓋掉工作區),等待重新切回分支時,還原暫存。
此處所說的暫存不是之前的將程式碼提交到暫存區,因為當前分支工作區的程式碼會變成要切換分支工作區的程式碼,而導致當前分支工作區的更改丟失,此處的暫存類似於將修改寄存,重新切回該分支時再還原。
暫存更改:
git stash
還原暫存的內容:
git stash pop
合併分支:
將指定分支合併到當前所在的分支,所以,在分支開發完畢後,合併分支需要先切換回 master 主分支。
git merge 指定的分支名
檢視分支合併的圖譜:
git log –graph
git log –graph –oneline
紅色線代表主分支,綠色線代表新建立的分支,分支上的 *
代表提交到版本庫的節點。--oneline
引數表示提交資訊顯示為一行。
12、解決衝突
當建立分支後,分支和 master 主分支分別提交程式碼到版本庫,此時切換回 master 主分支,合併分支會出現衝突,需手動處理後,重新提交到暫存區並提交到版本庫。
1 2 3 4 5 |
<<<<<<< HEAD (當前更改) master 分支程式碼 ======= 開發分支的程式碼 >>>>>>> 開發的分支 (傳入的更改) |
Git 操作遠端倉庫
遠端倉庫可以是 Github、Gitee(碼雲)、Coding 或者中央伺服器等等。
以下是常用免費倉庫的地址,可以在首頁註冊賬號:
- Github: https://github.com
- Gitee: https://gitee.com
- Coding: https://coding.net
1、處理需要過濾和提交的資料夾
使用 WebStrom 編輯器編輯程式碼時,會自動在根目錄生成 .idea
資料夾,使用 Mac 開發時根目錄下的 .DS_Store
資料夾,以及在專案開發時會安裝依賴存放在 node_modules
資料夾中,此類資料夾都是在把程式碼上傳到遠端倉庫或中央伺服器時不應該上傳的,因此應該在上傳之前過濾掉。
在根目錄建立
.gitignore
檔案用於記錄上傳時被忽略的資料夾,內容(可根據需要自行配置)如下:
1 2 3 |
.idea .DS_Store node_modules |
Git 上傳時會自動忽略空資料夾,假設想要上傳一個名為 public
的空資料夾,需要在資料夾內新建一個名為 .gitkeep
的檔案(名字隨意,最好有語義化),目的是使要提交的空資料夾不再為空。
2、關聯遠端倉庫
git remote add origin 遠端倉庫地址
3、檢視關聯的遠端倉庫
git remote -v
4、刪除遠端倉庫的關聯
git remote rm 地址別名
地址別名指的是上面的 origin
,也可以是其他名稱,必須對應要刪除關聯的地址別名。
5、推送程式碼到遠端倉庫
git push origin master
git push -u origin master
如果加上了 -u
引數,以後再次提交時可省略地址別名和分支名稱,直接執行下面命令進行提交。
git push
6、拉取遠端倉庫的程式碼
在提交程式碼時,如果直接提交到遠端倉庫,會將當前程式碼覆蓋到遠端倉庫,如果別人之前也向遠端倉庫提交了程式碼,會在遠端倉庫中造成衝突,所以一般在提交程式碼之前先拉取遠端倉庫的程式碼與原生代碼進行合併,併產生一個新的歷史記錄,若出現衝突,手動處理衝突後再統一提交到遠端倉庫。
拉取但不合並程式碼(與 merge 配合,不常用):
git fetch origin master
拉取併合並程式碼(常用):
git pull origin master
7、建立 gh-pages 分支來發布靜態頁
涉及到遠端倉庫網站上的操作均以 Github 為例,其他倉庫大同小異:
- 在專案中建立一個名為
gh-pages
的分支; - 將分支提交到線上倉庫;
- 找到提供給你的倉庫網站的
Settings
切換到github-pages
; - 點選該欄頂端的地址可以訪問我們的靜態頁。
git checkout -b gh-pages
touch index.html
git add .
git commit -m “提交資訊”
git push origin gh-pages
8、拉取別人的專案到本地
git clone 專案地址 專案別名
上面命令專案別名是可選的,相當於給專案根資料夾重新命名。
9、向別人的專案提問
- 在遠端倉庫網站進入別人的專案頁面;
- 點選
Issue
選項; - 輸入問題標題和問題描述並點選提交;
- 專案所有者可以回覆或關閉問題。
10、更改別人的專案程式碼
- 在別人專案的主頁上有一個叉子的圖示,操作名為
Fork
; Fork
是在當前專案下克隆了一份,如果程式碼更新,不會隨之更新;- 使用
clone
命令克隆自己的地址將專案拉到本地,進行操作; - 預設就是 Git 倉庫而且有
origin
地址,修改後可以將程式碼提交到自己的倉庫上; - 只有
Fork
關係才能修改別人程式碼後點擊New pull request
傳送提交請求; - 點選
Create pull request
按鈕,填寫提交標題,和提交詳情,確認提交; - 專案所有者可以在自己的專案頁面中
Pull request
選單中檢視提交併處理; - 點選
Close pull request
關閉,點選Merge pull request
同意提交併合併。
如果是一個團隊的其他人需要操作同一個專案,上面的過程顯得很繁瑣,專案所有者可以在 Settings
的 Collaborators
選項中通過新增別人的賬號或使用者名稱向專案中新增貢獻者,被新增的人擁有最大許可權。
GUI 介面化
在當前的前端開發編輯器中,如 VSCode 和 WebStorm 等都集成了 Git,可以直接點選按鈕操作,不必使用命令列,這種操作 Git 的介面稱作 GUI 介面,個人建議還是儘量少的使用 GUI 介面,命令列是根本,還是多敲命令列,孰能生巧。