Git三劍客之Git

一、Git概述

版本管理的演變
1)集中式的版本管理(SVN)

  1. 有集中的版本管理服務器
  2. 具備文件版本管理和分支管理能力
  3. 集成效率有明顯地提高
  4. 客戶端必須時刻和服務器相連

2)分布式的版本管理(Git)

  1. 服務端和客戶端都有完整的版本庫
  2. 脫離服務端、客戶端照樣可以管理版本
  3. 查看歷史和版本比較等多數操作,都不需要訪問服務器,比集中式VCS更能提高版本管理效率
分布式的管理系統

3)GIt的優(yōu)點

  • 最優(yōu)的存儲能力
  • 非凡的性能
  • 開源的
  • 容易做備份
  • 支持離線操作
  • 很容易定制工作流程

二、安裝Git

1、Git官方文檔地址:

https://git-scm.com/book/zh/v2

2、macOS 平臺 Git 下載地址:

https://git-scm.com/download/mac

3、Windows 平臺 Git 下載地址:

https://git-scm.com/download/win

4、Linux 平臺 Git 下載地址:

https://git-scm.com/download/linux

5、檢查安裝結果

$ git --version ## 通過執(zhí)行該命令,看git是否返回版本信息

三、使用Git之前的最小配置

  1. 配置user.name和user.email
$ git config --global user.name 'your_name'
$ git config --global user.email 'your_email@domain.com'
  1. git config命令的三個作用域
缺省等同于local
$ git config --local ## local只對某個倉庫有效
$ git config --global ## global對當前用戶所有倉庫有效
$ git config --system ## system對系統所有登錄的用戶有效
  1. 查看config配置,加--list
$ git config --list     #會輸出global、local、system所有的配置信息
$ git config --list --global  #僅輸出global的配置信息
$ git config --list --system  #僅輸出system的配置信息
$ git config --list --local    ##僅輸出local的配置信息
  1. 清除config配置,加--unset
$ git config --unset --global user.name
$ git config --unset --system user.name
$ git config --unset --local user.name

四、創(chuàng)建第一個倉庫,并創(chuàng)建local用戶

  1. 創(chuàng)建Git倉庫
    兩種場景
  • 把已有的項目代碼納入git管理
$ cd 項目所在文件夾
$ git init
  • 新建的項目,直接使用git進行管理
$ cd 某個文件夾
$ git init your_project
$ cd your project
新建git倉庫

查看新建的git倉庫
  1. 向Git倉庫中添加文件
$ git add file_name ## file_name表示你的文件的名字
$ git add file_name1 file_name2 file_name3 ## 添加多個文件
$ git add -u ## 保存修改和刪除,但是不包括新建文件。
$ git add . ## 保存新的添加和修改,但是不包括刪除
$ git add -A ## 保存所有的修改

五、通過幾次commit來認識工作區(qū)和暫存區(qū)、版本歷史

工作區(qū)和暫存區(qū)、版本歷史

幾次commit

通過git log命令來查看版本歷史


git log命令

六、給文件重命名的簡便方法

  1. 麻煩的方式
$ mv old_file_name new_file_name ## 第一步,修改文件名
$ git add new_file_name ## 第二步,將修改后的文件,添加到Git中
$ git rm old_file_name ## 第三步,移除掉舊的文件
  1. 簡單的方式
$ git mv old_file_name new_file_name ## 通過git mv命令,直接將文
件名修改

七、通過git log查看版本演變歷史

  1. 查看git log列表


    image.png
  2. 指定查看幾個版本的歷史


    指定查看最近兩個版本的歷史記錄

    指定查看最近三個版本的歷史記錄,并以列表的形式顯示

3、查看本地的分支信息


查看本地分支信息

4、新建一個臨時分支,并稍作修改


image.png

查看所有分支歷史版本信息


以圖形化的方式查看所有分支的版本信息
總結
查看詳細日志
$ git log
$ git log --graph ## 圖形化顯示
$ git log branch_name ## 查看branch_name分支的日志
查看簡潔日志
$ git log --oneline
$ git log --oneline branch_name ## 查看branch_name分支的日志
$ git log --oneline --all
$ git log --oneline --graph
查看最近幾次的日志
$ git log -n4 ## n4表示查看最近4次的日志
$ git log --oneline -n4

查看git 的命令api文檔
$ git help --web log

八、gitk:通過圖形界面工具來查看git歷史

gitk命令


gitk圖形工具

九、探秘.git文件夾

.git目錄文件

、

  • HEAD文件
    該文件內容為當前的分支信息,切換分支的時候,該文件信息會隨之改變,如下圖所示


    HEAD文件
  • config文件
    存放了本地倉庫的配置信息

    config文件

  • refs
    refs文件中存放了,所有分支和tag(里程碑)信息(40位的hash值),對應的是分支最新的一個commit哈希

    refs文件夾

  • objects
    objects文件夾下都是一些兩位數的文件夾,里面存放一個40位hash文件,類型為tree,這個tree文件中又存放了一個blob對象,通cat-file命令查看,發(fā)現這個blob就是git管理的文件對象,如圖所示是一個css文件。

    objects文件夾

十、commit、tree、blob三者之間的關系

commit就相當于當前倉庫的一個快照,而一個commit也對應一棵tree(目錄對應tree,文件對應blob)
tree就相當于文件夾


commit、tree、blob三者之間的關系

通過命令行來證明上面的圖


image.png

十一、數一下tree的個數

image.png

答案:有兩棵樹(commit對應的一棵樹,文件夾doc對應的一顆樹),一個commit,一個blob


image.png

十二、分離頭指針情況下的注意事項

分離頭指針指的是,HEAD當前沒有指向任何一個分支,而是某一個歷史commit上。
1、分離頭指針狀態(tài)下,開發(fā)的代碼,需要關聯到分支,如果不關聯到分支,在分離頭指針狀態(tài)下,切換到分支上時,分離頭指針狀態(tài)下開發(fā)的代碼,將會被git清除


分離頭指針
分離頭指針的狀態(tài)下,切換到master分支

十三、進一步理解HEAD和branch

# 基于新分支創(chuàng)建一個老的分支,此時git會自動切換到新建的分支上
$ git checkout -b newbranch oldbranch
# git diff命令可以這樣比較兩個commit(快照)的之間的差異
$ git diff d3af93fba4f0a  990c6561e69fee
# 使用git diff命令比較版本,也可以使用HEAD來指代當前版本與之前n個版本之間的區(qū)別
$ git diff HEAD HEAD~n

十四、刪除無用的分支

git branch -d 分子名稱
當-d無法刪除,并且確認分支無用的情況下,使用-D進行強制刪除


刪除分支

十五、怎樣修改最新commit的message

image.png

十六、怎樣修改老舊commit的message

!怎樣修改老舊commit的message](https://upload-images.jianshu.io/upload_images/4038260-6ec0f55a8ef04bcd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
想要修改modify index and style這個commit message,則需要使用rebase變基操作,這里要用到這個commit的父親commit,此時會彈出一個交互窗口,使用r命令來修改message

rebase

修改保存退出,又會彈出一個交互窗口,在這個交互窗口中修改commit messge,保存退出
image.png

修改成功

十七、怎樣將連續(xù)的commit合并成為一個

git rebase -i 父親commit的hash
在交互窗口中,將要合并的commit 使用squash(壓縮命令進行合并),保存退出


rebase

輸入合并的message保存退出


image.png

十八、怎樣將間隔的commit合并成為一個

image.png

在交互窗口中將要合并的兩個commit放到一起,使用s命令進行合并,保存退出
此時會有消息提示
git status查看狀態(tài)
git rebase continue命令輸入合并后的commit messge后,再保存退出


合并成功

十九、怎么比較暫存區(qū)和HEAD所含文件的差異

git diff --cached-------比較暫存區(qū)和HEAD的差別


git diff --cached

二十、怎么比較工作區(qū)和暫存區(qū)的差異

git diff 比較工作區(qū)暫存區(qū)所有的文件差異

git diff

git diff -- filepath(可以指定多個文件)


git diff -- filepath

二十一、如何讓暫存區(qū)恢復成HEAD的版本

git reset HEAD--------取消暫存區(qū)的修改,恢復到HEAD版本


git reset HEAD

二十二、如何讓工作區(qū)恢復成暫存區(qū)的版本


修改暫存區(qū)使用git checkout命令,修改暫存區(qū)則使用git reset命令


二十三、怎么取消暫存區(qū)部分文件的修改

取消暫存區(qū)中index.html的修改


二十四、消除最近的幾次提交

回退到以前的某個commit

二十五、看看不同commit的指定文件的差異

二十六、正確刪除文件看的方法

二十七、開發(fā)中緊急加塞了緊急任務怎么處理

正常開發(fā)需求,修改了index.html和js文件



此時臨時加塞了一個需求,比如項目bug修改,這個時候就需要把上面需求開發(fā)的代碼暫存起來,用到命令git stash



可以看到之前兩個文件的修改都被暫存到stash中了,然后我們就能開發(fā)我們的新需求

新需求開發(fā)完畢,提交版本庫后,我們回過頭來取出stash中暫存的兩個文件修改



發(fā)現我們之前開發(fā)的代碼被恢復了回來

二十八、如何指定不需要git管理的文件

通過添加名為.gitignore的文件,來指定

二十九、如何將git倉庫備份到本地

image.png

image.png

image.png

新建一個文件夾git-backup,克隆遠程倉庫,可以看到遠程倉庫有兩個分支master,temp
然后再遠程倉庫git_learning中添加備份倉庫地址,新建一個pyy的分支,并push到備份倉庫



然后查看備份倉庫中的分支信息,發(fā)現也更新了pyy的分支


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

相關閱讀更多精彩內容

  • 簡介 什么是git? git是一款開源的分布式版本控制工具 在世界上所有的分布式版本控制工具中,git是最快、最簡...
    JonesCxy閱讀 1,261評論 0 3
  • 第1章 Shell和vi 1.1什么是shell 在計算機科學中,Shell俗稱殼,用來區(qū)別于Kernel(核),...
    福爾摩雞閱讀 1,203評論 0 1
  • Home 關于Gitee Gitee 是開源中國社區(qū)[http://www.oschina.net]團隊基于開源項...
    奮拓達閱讀 2,511評論 0 3
  • 一、Git綜述 1、VCS出現前的狀況 用目錄拷貝區(qū)別不同版本 公共文件容易被覆蓋 成員溝通成本很高,代碼集成效率...
    開心的鑼鼓閱讀 1,925評論 0 1
  • 廖老師的教程不錯:http://www.liaoxuefeng.com/wiki/0013739516305929...
    my__life閱讀 333評論 0 0

友情鏈接更多精彩內容