git系列講解

1.git是什麼呢?
維基百科給出的定義: git是一個分佈式版本控制軟件,最初由(Linus Torvalds)創作

什麼是版本控制?
項目經理與程序員的恩怨情仇
企業真實案例:開發了a功能,之後項目所要改成b功能,開發完之後又要改c功能,最後又說還是用回a功能。
沒有git等版本控制軟件之前,如何做版本控制。
有了git之後,如何做版本控制。

2.git的作用是什麼?
版本控制

3.git的優勢哪裏?
同類型軟件有svn、cvs,git相比於他們最大的優勢就在於git是分佈式的
企業真實案例:svn服務器欠費,急需發版本。非常麻煩
Git 允許多個遠程倉庫存在,使得這樣一種工作流成爲可能:每個開發者擁有自己倉庫的寫權限和其他所有人倉庫的讀權限。 這種情形下通常會有個代表`‘官方’'項目的權威的倉庫。 要爲這個項目做貢獻,你需要從該項目克隆出一個自己的公開倉庫,然後將自己的修改推送上去。 接着你可以請求官方倉庫的維護者拉取更新合併到主項目。 維護者可以將你的倉庫作爲遠程倉庫添加進來,在本地測試你的變更,將其合併入他們的分支並推送回官方倉庫。

4.初始github
全球最大的同×××友網站:https://github.com/

5.git安裝
windows下面安裝git:
下載git
到git官網上下載,自行選擇合適系統的: https://git-scm.com/
如果是win版本的,直接按默認安裝即可

linux上安裝,以centos 6.6爲例:
yum命令安裝:
yum install git
yum install 安裝的git不是最新版本,如需最新版本需要自行編譯

編譯git源碼安裝:
    到下面的網站下載合適的版本
        https://mirrors.edge.kernel.org/pub/software/scm/git/
    安裝git的依賴項
        yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
        yum install  gcc perl-ExtUtils-MakeMaker
    移除已經安裝的git
        yum remove git

    cd git 解壓目錄
    預編譯git
        ./configure --prefix=/usr/local/git_2.9.5
    編譯並安裝git
        make && make install
    將git的腳本軟連接到/usr/bin/ 目錄下
    ln -s /usr/local/git_2.9.5/bin/* /usr/bin/
git安裝完成     

6. git入門級命令

爲什麼建議使用命令行的方式操作git?
1.命令行會了,圖形界面的操作時完全沒問題的,反之,則不然
2.有些地方如linux服務器,沒有圖形界面,如果碰到問題需要使用git,不會命令行操作啥都幹不了

git 本地操作
git --help
調出Git的幫助文檔
git +命令 --help
查看某個具體命令的幫助文檔
git --version
查看git的版本
git init
生成空的本地倉庫
git add
將文件添加到暫存區

初次commit之前,需要配置用戶郵箱及用戶名,使用以下命令:
git config --global user.email "[email protected]"
git config --global user.name "Your Name"
git commit
將暫存區裏的文件提交到本地倉庫

git remote
用於管理遠程倉庫

git push -u origin master
往名字爲origin的倉庫的master分支上提交變更
git fetch
拉取遠程倉庫的變更到本地倉庫
git merge origin/master
將遠程的變更,合併到本地倉庫的master分支
git pull
-- 不建議使用 等同於fetch之後merge

git的文件狀態

git status
用於查看git的狀態
git rm
用於git文件的刪除操作
如果只是 git rm --cache 僅刪除暫存區裏的文件
如果不加--cache 會刪除工作區裏的文件 並提交到暫存區
git checkout
直接加文件名 從暫存區將文件恢復到工作區,如果工作區已經有該文件,則會選擇覆蓋
加了【分支名】 +文件名 則表示從分支名爲所寫的分支名中拉取文件 並覆蓋工作區裏的文件

新建文件--->Untracked
使用add命令將新建的文件加入到暫存區--->Staged
使用commit命令將暫存區的文件提交到本地倉庫--->Unmodified
如果對Unmodified狀態的文件進行修改---> modified
如果對Unmodified狀態的文件進行remove操作--->Untracked

git的圖形化客戶端

圖形化客戶端:sourcetree
下載:
    https://www.sourcetreeapp.com/
安裝:
    由於種種不可描述的原因,無法註冊賬號且無法登陸所以需要繞過登陸
繞過登陸:
    去到 C:\Users\當前用戶目錄\AppData\Local\Atlassian\SourceTree 目錄下
    新建 accounts.json 文件
    將一下內容複製進去
    [
      {
        "$id": "1",
        "$type": "SourceTree.Api.Host.Identity.Model.IdentityAccount, SourceTree.Api.Host.Identity",
        "Authenticate": true,
        "HostInstance": {
          "$id": "2",
          "$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountInstance, SourceTree.Host.AtlassianAccount",
          "Host": {
            "$id": "3",
            "$type": "SourceTree.Host.Atlassianaccount.AtlassianAccountHost, SourceTree.Host.AtlassianAccount",
            "Id": "atlassian account"
          },
          "BaseUrl": "https://id.atlassian.com/"
        },
        "Credentials": {
          "$id": "4",
          "$type": "SourceTree.Model.BasicAuthCredentials, SourceTree.Api.Account",
          "Username": "",
          "Email": null
        },
        "IsDefault": false
      }
    ]

開發利器--git分支
1.什麼是分支
軟件項目中啓動一套單獨的開發線的方法
2.爲什麼使用git
1.可以很好的避免版本兼容開發的問題,避免不同版本之間的相互影響
2.封裝一個開發階段
3.解決bug的時候新建分支,用於對該bug的研究
3.git中跟分支相關的命令
git branch 分支名
git branch 不加任何參數,列出所有的分支,分支前面有*號,代表該分支爲當前所在分支

  • 創建分支的時候,分支名不用使用特殊符號
    git branch -d 分支名
    *不能刪除當前所在的分支
    git branch -m 舊分支名 新分支名

    git checkout 分支名 切換分支
    如果在分支上面對文件進行修改之後,沒有commit就切換到另外一個分支b,
    這個時候會報錯,因爲沒有commit的文件在切換分支之後會不覆蓋。所以Git 報錯提示。

    git checkout -f 分支名 強制切換到分支,如果當前有爲提交的變更,會直接丟棄
    -f 參數一定一定要非常非常小心使用,一般情況下不建議使用,除非真的要強制去執行

追根溯源--git log

log命令的作用:
用於查看git的提交歷史
git log命令顯示的信息的具體含義
commit 4a70ceb24b6849ad830d6af5126c9227b333d2d1 --SHA-1 校驗和 commit id
Author: wiggin <[email protected]> --作者跟郵箱概要信息
Date: Wed May 16 23:51:02 2018 +0800 --提交時間

v2  --commit的時候,使用-m選項說寫一段概要說明
日常在使用commit的時候,-m選項所寫得內容一定不能隨便寫
“修改了登陸的bug”--》“新增用戶管理中心”

git log -數字 表示查看最近幾次的提交
git log -p -2 顯示最近兩次提交的不同點
git log --author 查看具體某個作者的提交
git log --online 輸出簡要的信息
git log --graph 以一個簡單的線串聯起整個提交歷史
git log 輸出信息的定製

**文件對比利器--git diff

diff -->difference的縮寫,用於比較差異
使用場景:
    1、解決衝突
    2、製作補丁
git diff 不加任何參數  用於比較當前工作區跟暫存區的差異
git diff --cached 或者--staged 
git diff HEAD 
git diff 分支名  查看當前分支跟指定的分支的差異
git diff 分支名1 分支名2 查看兩個指定分支(已提交的)的差異,分支2 跟分支1的差別
git diff 文件名 查看指定文件的差異
git diff commitid1 commitid2 用於列出兩個歷史提交的差異
git diff --stat 用於羅列有變更的文件

diff --git a/file2 b/file2  file2的兩個版本
index c200906..29e2b3c 100644
--- a/file2 表示變更前的文件
+++ b/file2 表示當前文件
@@ -1 +1,2 @@  變更前的文件的第一行  變更之後的文件的第一行往下兩行 這塊文件區域有差異
 222
+111    +表示新增了一行 -表示刪除了一行  如果對一行內容進行修改,在此處體現出來的就是先刪除一行,再新增一行

diff --git a/file2 b/file2
index 29e2b3c..2e2f5e4 100644
--- a/file2
+++ b/file2
@@ -1,2 +1,3 @@
 222
+333
 111

git更改提交

1.將不必要的文件add
2.上次提交覺得是錯的
3.不想改變暫存區內容,只是想調整提交的信息
4.版本回滾

git reset HEAD 文件名 移除不必要的添加到暫存區的文件
git reset HEAD^ 或者 commitid 去掉上一次的提交
git reset --soft HEAD^ 修改上次提交的信息吧即commit -m "修改這裏的內容"

git reset --soft 只是將HEAD引用指向指定的提交,工作區跟暫存區的內容不會改變
git reset --mixed (默認選項)將HEAD指向指定的提交,暫存區的內容隨之改變,工作區內容不變
git reset --hard 將HEAD指向指定的提交,暫存區跟工作區都會改變

第十四講--gitignore

爲什麼要使用.gitignore 文件
大量與項目無關的文件全推到遠程倉庫上,同步的時候會非常慢,且跟編輯器相關的一些配置推上去之後,別人更新也會受其影響。所以,我們使用該文件,對不必要的文件進行忽略,使其不被git追蹤

一把情況下,.gitignore文件,在項目一開始創建的時候就創建,並推送到遠程服務器上。這樣大家初次同步項目的時候,就是用到該文件,避免以後,團隊成員把與項目無關的文件,傳到遠程服務器上

.log 表示忽略項目中所有以.log結尾的文件
123?.log 表示忽略項目中所有以123加任意字符的文件
/error.log 表示忽略項目中根目錄中的error.log 這個文件
src/main/test/
表示忽略/src/main/test/目錄下的所有文件
*.class
**/java/ 匹配所有java目錄下的所有文件
!/error.log 表示在之前的匹配規則下,被命中的文件,可以使用!對前面的規則進行否定

對於已經提交到遠程或本地倉庫的文件,.gitignore配置之後不會生效。我們必須先刪除本地暫存區裏的文件,之後在加上.gitignore 文件,最後再把變更提交到遠程倉庫上。
git rm --cached 文件名 從暫存區刪除某個文件
git rm -rf --cached 文件夾 表示遞歸刪除暫存區該文件夾的所有東西

落葉歸根--分支合併及衝突解決

之前我們是使用branch 命令創建分支
使用checkout在不同分支之間切換,但是落葉終究要歸根,分出去的枝葉也終究要彙總

這個時候我們可使用merge命令進行分支的合併

衝突與解決
master分離出dev分支,對a文件修改後提交,之後跑到master分支,也對a修改後提交,之後merge dev分支,此時衝突產生
git diff --name-only --diff-filter=U 查看衝突的文件
git ls-files -u 也可以顯示沒被合併的文件
之後使用vim對文件進行修改或者直接用開發工具進行修改

更多學習資料可查看
https://xdclass.net/html/sort.html

如需針對此內容進行深入瞭解可查看
Jenkins持續集成視頻教程Git

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章