原文出自:https://www.pandashen.com
什麼是 Git?
Git 是一個免費的開源分佈式版本控制系統,它的設計目的是爲了速度和效率的處理從小型到大型的項目;Git 可以幫我們管理我們的代碼,記錄歷史,只要代碼提交到 Git 上就永久不會丟失,可以隨時 “穿越”(回到之前的某一個版本);可以多端共享,團隊協作中,多個人操作了同一個文件時,可以實現自動合併(模塊化,組件化)、標記衝突,擁有強大的分支管理系統。
Git 與 SVN 的區別
SVN:集中式,需要一臺中央服務器,所有代碼的拉取和提交都是在中央服務器,一旦中央服務器或者網絡出現故障,則不能拉取和提交代碼,需要不斷去備份中央服務器,防止代碼丟失。
Git:分佈式,有一箇中央服務器的同時,每個開發者本地都有自己的本地倉庫,擁有完整的版本庫,不用擔心代碼丟失,Git 存儲的是代碼變化的快照,更新代碼的速度要比 SVN 更快。
Git 安裝
Windows
Mac
- 如果安裝過 Xcode 自帶 Git,https://developer.apple.com/x...
-
可以安裝 Homebrew,是 wmac 的包管理器,https://brew.sh/,下面是兩款界面美化插件:
- Oh My ZSH:http://ohmyz.sh/
- iTerm2:https://www.iterm2.com/
Linux 命令
1、打印工作目錄
pwd
2、創建文件夾
mkdir 文件夾名
3、改變路徑
進入盤符:
cd d:
進入文件夾:
cd 文件夾名
回上一級目錄:
cd ..
進入某一個路徑:
cd 路徑
想要進入某一個不知道路徑的文件夾中,可以直接拖拽該文件到命令窗口,會自動識別路徑。
4、查看文件列表
lsls -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 --graphgit log --graph --oneline
紅色線代表主分支,綠色線代表新創建的分支,分支上的 *
代表提交到版本庫的節點。--oneline
參數表示提交信息顯示爲一行。
12、解決衝突
當創建分支後,分支和 master 主分支分別提交代碼到版本庫,此時切換回 master 主分支,合併分支會出現衝突,需手動處理後,重新提交到暫存區並提交到版本庫。
// 代碼衝突
<<<<<<< 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
文件用於記錄上傳時被忽略的文件夾,內容(可根據需要自行配置)如下:
文件:.gitignore
.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 mastergit 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 界面,命令行是根本,還是多敲命令行,孰能生巧。
<br/>