Git 重要概念和常用命令


重要概念

1. 版本庫(kù)&暫存區(qū)

目錄.git,是Git的版本庫(kù)。Git的版本庫(kù)里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD。
git add把文件添加進(jìn)去,實(shí)際上就是把文件修改添加到暫存區(qū);
git commit提交更改,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支。

image.png

2. commit id(版本號(hào))

一大串類似 1094adb... 的是commit id(版本號(hào)),和SVN不一樣,Git的commit id不是1,2,3……遞增的數(shù)字,而是一個(gè)SHA1計(jì)算出來(lái)的一個(gè)非常大的數(shù)字,用十六進(jìn)制表示。
為什么commit id需要用這么一大串?dāng)?shù)字表示呢?
因?yàn)镚it是分布式的版本控制系統(tǒng),多人在同一個(gè)版本庫(kù)里工作,如果大家都用1,2,3……作為版本號(hào),那肯定就沖突了。


3. HEAD 指針

HEAD 指向的版本就是當(dāng)前版本,之所以可以回退版本這么快,因?yàn)閷?shí)際上只是改變了 HEAD 指針的指向。


4. 創(chuàng)建與合并分支

HEAD嚴(yán)格來(lái)說(shuō)不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是當(dāng)前分支。
一開(kāi)始的時(shí)候,master分支是一條線,Git用master指向最新的提交,再用HEAD指向master,就能確定當(dāng)前分支,以及當(dāng)前分支的提交點(diǎn)。每次提交,master分支都會(huì)向前移動(dòng)一步,這樣,隨著你不斷提交,master分支的線也越來(lái)越長(zhǎng)。


image.png

當(dāng)我們創(chuàng)建新的分支,例如dev時(shí),Git新建了一個(gè)指針叫dev,指向master相同的提交,再把HEAD指向dev,就表示當(dāng)前分支在dev上。

創(chuàng)建并切換分支:git checkout -b dev


image.png

Git創(chuàng)建一個(gè)分支很快,因?yàn)槌嗽黾右粋€(gè)dev指針,改改HEAD的指向,工作區(qū)的文件都沒(méi)有任何變化。 不過(guò),從現(xiàn)在開(kāi)始,對(duì)工作區(qū)的修改和提交就是針對(duì)dev分支了,比如新提交一次后,dev指針往前移動(dòng)一步,而master指針不變。


image.png

在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最簡(jiǎn)單的方法,就是直接把master指向dev的當(dāng)前提交,就完成了合并。
切換回 master 分支:git checkout master

將 dev 分支合并到 master 分支上:git merge dev

image.png

合并完分支后,甚至可以刪除dev分支。刪除dev分支就是把dev指針給刪掉,刪掉后,我們就剩下了一條master分支。
刪除 dev 分支:git branch -d dev


image.png

5. 分支策略

在實(shí)際開(kāi)發(fā)中,我們應(yīng)該按照幾個(gè)基本原則進(jìn)行分支管理:
首先,master分支應(yīng)該是非常穩(wěn)定的,也就是僅用來(lái)發(fā)布新版本,平時(shí)不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是說(shuō),dev分支是不穩(wěn)定的,到某個(gè)時(shí)候,比如1.0版本發(fā)布時(shí),再把dev分支合并到master上,在master分支發(fā)布1.0版本;
你和你的小伙伴們每個(gè)人都在dev分支上干活,每個(gè)人都有自己的分支,時(shí)不時(shí)地往dev分支上合并就可以了。
所以,團(tuán)隊(duì)合作的分支看起來(lái)就像這樣:

image.png

常用命令

配置命令

全局設(shè)置提交代碼時(shí)的用戶信息
git config --global user.name "[name]"
git config --global user.email "[email address]"

新建代碼庫(kù)

在當(dāng)前目錄新建一個(gè)Git代碼庫(kù)
git init

增加文件

添加指定文件到暫存區(qū)
git add [file1] [file2] ...

添加當(dāng)前目錄的所有文件到暫存區(qū)
git add .

代碼提交

提交暫存區(qū)到倉(cāng)庫(kù)區(qū)
git commit -m [message]

分支

列出所有本地分支
git branch

列出所有遠(yuǎn)程分支
git branch -r

新建一個(gè)分支,但依然停留在當(dāng)前分支
git branch [branch-name]

新建一個(gè)分支,并切換到該分支
git checkout -b [branch]

切換到指定分支,并更新工作區(qū)
git checkout [branch-name]

建立追蹤關(guān)系,在現(xiàn)有分支與指定的遠(yuǎn)程分支之間
git branch --set-upstream [branch] [remote-branch]

合并指定分支到當(dāng)前分支
git merge [branch]

刪除分支
git branch -d [branch-name]

刪除遠(yuǎn)程分支
git push origin --delete [branch-name]

查看信息

顯示有變更的文件
git status

顯示當(dāng)前分支的版本歷史
git log

查看命令歷史
git reflog

顯示暫存區(qū)和工作區(qū)的差異
git diff

遠(yuǎn)程同步

查看遠(yuǎn)程庫(kù)信息
git remote -v;

在本地創(chuàng)建和遠(yuǎn)程分支對(duì)應(yīng)的分支
git checkout -b branch-name origin/branch-name(本地和遠(yuǎn)程分支的名稱最好一致)

建立本地分支和遠(yuǎn)程分支的關(guān)聯(lián)
git branch --set-upstream branch-name origin/branch-name

取回遠(yuǎn)程倉(cāng)庫(kù)的變化,并與本地分支合并
git pull [remote] [branch]

上傳本地指定分支到遠(yuǎn)程倉(cāng)庫(kù)
git push [remote] [branch]

撤銷

恢復(fù)暫存區(qū)的指定文件到工作區(qū)
git checkout [file]

恢復(fù)暫存區(qū)的所有文件到工作區(qū)
git checkout .

重置暫存區(qū)與工作區(qū),與上一次commit保持一致
git reset --hard commit_id

當(dāng)改亂了工作區(qū)某個(gè)文件的內(nèi)容,想直接丟棄工作區(qū)的修改時(shí),用命令 git checkout [file]。
不但改亂了工作區(qū)某個(gè)文件的內(nèi)容,還添加到了暫存區(qū)時(shí),想丟棄修改,分兩步,第一步用命令 git reset HEAD [file],第二步用命令 git checkout [file]。

刪除文件

刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)
git rm [file] 

改名文件,并且將這個(gè)改名放入暫存區(qū)
git mv [file-original] [file-renamed]

保存現(xiàn)場(chǎng)

保存現(xiàn)場(chǎng)
git stash

返回現(xiàn)場(chǎng)
git stash pop
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)。這樣一來(lái),任何一處協(xié)同...
    __silhouette閱讀 16,203評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉(cāng)庫(kù)完整的鏡像下來(lái)...
    sunnyghx閱讀 4,155評(píng)論 0 11
  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,852評(píng)論 9 163
  • Git常用語(yǔ)法 [TOC] Git簡(jiǎn)介 描述 ? Git(讀音為/g?t/。)是一個(gè)開(kāi)源的分布式版本控制系統(tǒng),...
    君惜丶閱讀 3,941評(píng)論 0 13
  • 中國(guó)曹碩 月亮 喜歡 上天入地 沒(méi)人管她 他一個(gè)人到陸地上變成了小船 一會(huì)兒又到天空變成了一個(gè)月餅 誰(shuí)也抓不到她 ...
    幸福一家曹碩閱讀 125評(píng)論 0 0

友情鏈接更多精彩內(nèi)容