Git 的基本操作

Git 是一個以命令行為主的免費(fèi)開源的分布式版本控制系統(tǒng),用于敏捷高效的處理任何或大或小的項(xiàng)目。是Linus Torvalds 為了幫助管理Linux內(nèi)核開發(fā)而開發(fā)的一個開放源碼的版本控制軟件。常見的CVS,SVN等都是集中式的版本控制系統(tǒng)。


git

版本控制系統(tǒng):集中式vs分布式

集中式版本控制系統(tǒng),版本庫是集中存放在中央服務(wù)器的,修改項(xiàng)目時(shí)需要先從中央服務(wù)器取得最新版本,然后修改,再將修改后的版本提交到中央服務(wù)器上。


集中式版本控制系統(tǒng)

集中式版本控制系統(tǒng)有很多好處,比如管理員可以充分了解每個開發(fā)者的進(jìn)度,但也有以下問題:第一,需要聯(lián)網(wǎng)工作,在網(wǎng)速不好的環(huán)境下效率非常地下;第二,若中央服務(wù)器發(fā)生故障,整個項(xiàng)目有可能會丟失所有歷史更新記錄。

而分布式版本控制系統(tǒng)則不同,沒有中央服務(wù)器,每個人都是一個完整的版本庫,因此工作時(shí)不需要聯(lián)網(wǎng),只要在需要時(shí)將修改推送即可,因此安全系數(shù)也高很多,某一人的電腦發(fā)生故障并不會影響整個項(xiàng)目,其他人電腦中也有。


分布式版本控制系統(tǒng)

Linux上安裝Git

  1. 在終端輸入git,看系統(tǒng)是否安裝Git
  2. 若終端顯示為

$ gitThe program 'git' is currently not installed. You can install it by typing:sudo apt-get install git

則沒有安裝,通過指令sudo apt-get install git 完成Git的安裝

常用Git操作

  • 配置Git基本信息:git config
  • 添加Git忽略文件:.gitignore
  • 創(chuàng)建版本庫:git init
  • 創(chuàng)建和刪除分支:git branch
  • 切換到某個分支:git checkout
  • 查看倉庫的狀態(tài):git status
  • 把某個文件添加到git暫存區(qū)域:git add
  • 把暫存區(qū)域的內(nèi)容提交到本地倉庫:git commit
  • 查看修改內(nèi)容:git diff
  • 重置代碼:git reset
  • 把本地倉庫推送到遠(yuǎn)程倉庫:git push
  • 把遠(yuǎn)程倉庫clone到本地:git clone
  • 把遠(yuǎn)程代碼拉到本地:git pull
  • rebase: git rebase

1、配置Git 基本信息

git config --global user.name "<username>"
git config --global user.email "<email>"

配置全局Git的用戶名和郵箱設(shè)置,之后每一次Git的提交都會使用這些信息,也可通過以下命令查詢當(dāng)前Git的配置

git config --list
配置git基本信息

2、添加Git忽略文件

有些在Git工作目錄中的文件比較重要或個人,不能提交他們,可以在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore文件,然后將要忽略的文件名填進(jìn)去,Git就會自動忽略這些文件。.gitignore 文件一般不存在,需要倉庫根目錄下手動創(chuàng)建,并且可以對 .gitignore 做版本管理。

忽略文件的原則:
(1)忽略操作系統(tǒng)自動生成的文件,比如縮略圖等;
(2)忽略編譯生成的中間文件、可執(zhí)行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進(jìn)版本庫,比如Java編譯產(chǎn)生的.class文件;
(3)忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。

Git 對于 .ignore 配置文件是按行從上到下進(jìn)行規(guī)則匹配的,意味著如果前面的規(guī)則匹配的范圍更大,則后面的規(guī)則將不會生效。下面列舉幾個常用的配置語法。
(1)以斜杠“/”開頭表示目錄;
(2)以星號“*”通配多個字符;
(3)以問號“?”通配單個字符
(4)以方括號“[]”包含單個字符的匹配列表;
(5)以嘆號“!”表示不忽略(跟蹤)匹配到的文件或目錄;

3、創(chuàng)建版本庫/倉庫

版本庫,又叫倉庫,可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時(shí)刻都可以追蹤歷史,或者在將來某個時(shí)刻可以“還原”。

第一步,創(chuàng)建一個空目錄

mkdir <repository_name>
cd <repository_name>

第二步,通過git init命令把這個目錄變成Git可以管理的倉庫

成功創(chuàng)建空倉庫

此時(shí),空倉庫就創(chuàng)建好了,列表顯示當(dāng)前空文件夾下有一個隱藏目錄 .git,這個目錄是Git用來跟蹤管理版本庫的,非常重要。

4、查看倉庫狀態(tài)

git status

查詢當(dāng)前版本庫的狀態(tài),若在本地倉庫有有任何文件內(nèi)容的改變,Git會檢測到該文件,并顯示

5、將文件添加到版本庫

本地倉庫由git維護(hù)的三棵“樹“組成。第一個是工作目錄(Working Dir),它持有實(shí)際文件;第二個是暫存區(qū)(Index),像個緩存區(qū)域,臨時(shí)保存文件的改動;第三個是Head區(qū),指向最后一次提交的結(jié)果。


Git工作流

前提:添加文件到版本庫,一定要將文件放在版本庫目錄下(或子目錄下)。

第一步:用命令git add添加到暫存區(qū)

git add <filename>

第二步:用命令git commit實(shí)際提交改動

git commit -m "<information>"

-m后面輸入的是本次提交的說明文檔,可以方便自己和別人閱讀,也可以省略,但不建議。同時(shí),可以多次add不同文件,commit可以一次提交多個文件,比如:

git add file1.txt
git add file2.txt   file3.txt
git commit -m "add 3 files"
Git添加文件到版本庫

注:現(xiàn)在的改動已經(jīng)提交到了HEAD,但還沒有到遠(yuǎn)端倉庫。

6、查看修改內(nèi)容

git diff <file_name>

git diff顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式,可以從上面的命令輸出看到文件的修改內(nèi)容。

查看修改內(nèi)容

7、版本回退

git reset --head <commit_id>

HEAD 指向的版本就是當(dāng)前版本,Git允許我們在版本的歷史之間回退;回退前,用git log可以查看提交歷史,以便確定回退到哪個版本;要重返現(xiàn)在版本,用 git reflog 查看命令歷史,以便確定要回到未來的哪個版本

8、撤銷修改

  1. 文件在工作區(qū),丟棄修改
git checkout -- <file_name>
  1. 文件在暫存區(qū),丟棄修改
git reset HEAD <file_name>
git checkout -- <file_name>

9、刪除和重置文件

第一步:刪除本地文件

rm <file_name>

第二步:分兩種情況

  1. 確實(shí)刪除,從版本庫中也刪除
git rm <file_name>
git commit -m "<remove_info>"
  1. 刪錯了,從版本庫恢復(fù)到最新版本
git checkout -- <file_name>

10、分支的創(chuàng)建刪除合并

分支是用來將特性開發(fā)絕原來來的,我們創(chuàng)建倉庫時(shí),master是默認(rèn)分支,可以在創(chuàng)建其他分支,在該分支上進(jìn)行開發(fā),完成后將它們合并到主分支上,并根據(jù)需要選擇是否刪除該子分支。


Git分支

查看分支:git branch
創(chuàng)建分支:git branch <name>
切換分支:git checkout <name>
創(chuàng)建+切換分支:git branch -b <name>
合并某分支到當(dāng)前分支:git merge <name>
刪除分支:git branch -d <name>

Git分支例子

11、Rebase

git checkout <name1>
git rebase <name2>

rebase 用于把一個分支的修改合并到當(dāng)前分支

注:rebase和merge都是用于合并分支,具體區(qū)別見這里,同時(shí)要知道,使用git pull時(shí)默認(rèn)是merge, 加 --rebase參數(shù)使其使用rebase方式。

12、標(biāo)簽

git tag <tag_id> <commit_id>

為軟件發(fā)布創(chuàng)建標(biāo)簽,這個概念早已存在,在SVN中也有,可以通過git log命令獲取提交ID,可以使用少一點(diǎn)的提交ID前幾位,只要它的指向具有唯一性。

命令 意義
git tag 查看所有標(biāo)簽
git tag <name> 新建一個標(biāo)簽,默認(rèn)為HEAD,也可以指定一個commit id
git push origin <tagname> 推送一個本地標(biāo)簽
git push origin --tags 推送全部未推送過的本地標(biāo)簽
git tag -d <tagname> 刪除一個本地標(biāo)簽
git push origin :refs/tags/<tagname> 刪除一個遠(yuǎn)程標(biāo)簽

Git中關(guān)于遠(yuǎn)程倉庫,工作區(qū)和暫存區(qū)等內(nèi)容,會在后續(xù)博客進(jìn)行介紹。

參考資料

git入門文檔
視頻教程《版本控制入門 – 搬進(jìn) Github》
Git學(xué)習(xí)資源指南
Git簡明指南
免費(fèi)的git書箱 progit2
git常用命令手冊
廖雪峰的git在線教程
在線嘗試git ( 中文翻譯在這里)
Git學(xué)習(xí)資源匯總
git merge和git rebase小結(jié)

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

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

  • 1、直接克隆遠(yuǎn)程倉庫的某個分支 git clone -b 遠(yuǎn)程分支名 遠(yuǎn)程倉庫地址 本地文件夾名 如...
    曹軒躍閱讀 669評論 0 1
  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,837評論 4 54
  • 好不好玩???
    杰杰6889閱讀 145評論 0 0
  • 今天孩子出院了!拔掉針頭那一瞬間,鐿皓說終于解放了,在醫(yī)院真沒意思還不如上學(xué)呢。這是想老師跟小伙伴們了吧!下午我就...
    王鐿皓媽媽閱讀 219評論 0 0
  • 故鄉(xiāng)家園猶在, 心難安。 孤清月夜空房塵再滿。 念親兒, 雁已過, 葉又黃。 年年歲歲相思淚兩行。
    不吃糖女士閱讀 530評論 7 9

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