前言
本文是Git的學習筆記,教程請移步 廖雪峰 Git 教程。
重要概念
1. 版本庫&暫存區
目錄.git,是Git的版本庫。Git的版本庫裡存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動建立的第一個分支master,以及指向master的一個指標叫HEAD。
git add把檔案新增進去,實際上就是把檔案修改新增到暫存區;
git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
2. commit id(版本號)
一大串類似 1094adb... 的是commit id(版本號),和SVN不一樣,Git的commit id不是1,2,3……遞增的數字,而是一個SHA1計算出來的一個非常大的數字,用十六進位制表示。
為什麼commit id需要用這麼一大串數字表示呢?
因為Git是分散式的版本控制系統,多人在同一個版本庫裡工作,如果大家都用1,2,3……作為版本號,那肯定就衝突了。
3. HEAD 指標
HEAD 指向的版本就是當前版本,之所以可以回退版本這麼快,因為實際上只是改變了 HEAD 指標的指向。
4. 建立與合併分支
HEAD嚴格來說不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當前分支。
一開始的時候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當前分支,以及當前分支的提交點。每次提交,master分支都會向前移動一步,這樣,隨著你不斷提交,master分支的線也越來越長。
當我們建立新的分支,例如dev時,Git新建了一個指標叫dev,指向master相同的提交,再把HEAD指向dev,就表示當前分支在dev上。
建立並切換分支:git checkout -b dev
切換回 master 分支:git checkout master
將 dev 分支合併到 master 分支上:git merge dev
刪除 dev 分支:git branch -d dev
5. 分支策略
在實際開發中,我們應該按照幾個基本原則進行分支管理:
首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本釋出時,再把dev分支合併到master上,在master分支釋出1.0版本;
你和你的小夥伴們每個人都在dev分支上幹活,每個人都有自己的分支,時不時地往dev分支上合併就可以了。
所以,團隊合作的分支看起來就像這樣:
常用命令
配置命令
全域性設定提交程式碼時的使用者資訊
git config --global user.name "[name]"
git config --global user.email "[email address]"
複製程式碼
新建程式碼庫
在當前目錄新建一個Git程式碼庫
git init
複製程式碼
增加檔案
新增指定檔案到暫存區
git add [file1] [file2] ...
新增當前目錄的所有檔案到暫存區
git add .
複製程式碼
程式碼提交
提交暫存區到倉庫區
git commit -m [message]
複製程式碼
分支
列出所有本地分支
git branch
列出所有遠端分支
git branch -r
新建一個分支,但依然停留在當前分支
git branch [branch-name]
新建一個分支,並切換到該分支
git checkout -b [branch]
切換到指定分支,並更新工作區
git checkout [branch-name]
建立追蹤關係,在現有分支與指定的遠端分支之間
git branch --set-upstream [branch] [remote-branch]
合併指定分支到當前分支
git merge [branch]
刪除分支
git branch -d [branch-name]
刪除遠端分支
git push origin --delete [branch-name]
複製程式碼
檢視資訊
顯示有變更的檔案
git status
顯示當前分支的版本歷史
git log
檢視命令歷史
git reflog
顯示暫存區和工作區的差異
git diff
複製程式碼
遠端同步
檢視遠端庫資訊
git remote -v;
在本地建立和遠端分支對應的分支
git checkout -b branch-name origin/branch-name(本地和遠端分支的名稱最好一致)
建立本地分支和遠端分支的關聯
git branch --set-upstream branch-name origin/branch-name
取回遠端倉庫的變化,並與本地分支合併
git pull [remote] [branch]
上傳本地指定分支到遠端倉庫
git push [remote] [branch]
複製程式碼
撤銷
恢復暫存區的指定檔案到工作區
git checkout [file]
恢復暫存區的所有檔案到工作區
git checkout .
重置暫存區與工作區,與上一次commit保持一致
git reset --hard commit_id
當改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令 git checkout [file]。
不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令 git reset HEAD [file],第二步用命令 git checkout [file]。
複製程式碼
刪除檔案
刪除工作區檔案,並且將這次刪除放入暫存區
git rm [file]
改名檔案,並且將這個改名放入暫存區
git mv [file-original] [file-renamed]
複製程式碼
儲存現場
儲存現場
git stash
返回現場
git stash pop
複製程式碼