Git 基礎命令巧妙理解

參考作品

Table of Contents

1.GIT結構:

​2.初始化一個Git倉庫

3.工作區(working area)

4.暫存區(stage):

5.本地倉庫與github倉庫:

6.分支:

1>dev使用分支:    

2>Bug分支:  --- 提供了一個stash功能

3>Feature分支:

7.Rebase:

8.標籤:

1>創建標籤:

2>操作標籤

9.自定義Git:

10.配置:

1>配置別名:

2>配置文件:

11.搭建Git服務器:


1.GIT結構:

    GIT一般分爲工作區、暫存區、本地倉庫和遠端分支:

  • 工作區、暫存區、本地倉庫在本地計算機上。
  • 工作區:本地電腦上的文件夾
  • 暫存區:工作區有一個隱藏目錄 .git(這是git的版本庫),裏面含:stage的暫存區,git爲我們創建的第一個分支master以及指向master的一個指針HEAD


2.初始化一個Git倉庫

    mkdir git_repo
    git init    

3.工作區(working area)

    git status                          隨時掌握工作區的狀態
    git add <filename>          添加到暫存區的stage
    git commit -m <message>     添加到暫存區的master
    git diff <filename>            可以查看修改內容(如果git status告訴你有文件被修改過)
    git checkout -- file            把file文件在工作區的修改全部撤銷.其實是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”
    git rm file                           從版本庫中刪除該文件

4.暫存區(stage):

    git log                               查看提交歷史,以便確定要回到過去
    git reflog                           查看命令歷史,以便確定要回到未來
    git reset --hard commit_id  歷史之間穿梭,HEAD指向的版本就是當前版本
    git reset --hard HEAD^       回退到上一個版本

5.本地倉庫與github倉庫:

    git remote                      查看遠程庫的信息
    git remote -v                  顯示更詳細遠程庫的信息
    git remote add origin [email protected]:myname/learngit.git
                                           把一個已有的本地倉庫與github倉庫關聯添加後,遠程庫的名字就是origin,這是Git默認的叫法
    git remote rm origin      刪除已有的GitHub遠程庫
    git push -u origin master 把本地庫的所有內容推送到遠程庫上,由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
    git clone                               克隆  
    git push origin master        推送分支,就是把該分支上的所有本地提交推送到遠程庫,推送時,要指定本地分支
    git push origin branch-name   推送其他分支
    git pull                                 抓取遠程的新提交

6.分支:

並不是一定要把本地分支往遠程推送,那麼,哪些分支需要推送,哪些不需要呢?
    master分支是主分支,因此要時刻與遠程同步;
    dev分支是開發分支,團隊所有成員都需要在上面工作,所以也需要與遠程同步;
    bug分支只用於在本地修復bug,就沒必要推到遠程了,除非老闆要看看你每週到底修復了幾個bug;
    feature分支是否推到遠程,取決於你是否和你的小夥伴合作在上面開發。
總之,就是在Git中,分支完全可以在本地自己藏着玩,是否推送,視你的心情而定!

1>dev使用分支:    

        git branch                           查看分支
        git branch <name>           創建分支
        git checkout <name>       切換分支
        git checkout -b <name>   創建+切換分支
        git merge <name>            合併某分支到當前分支 1.Fast-forward 2.Auto-merge 3.the 'recursive' strategy 4.
        git merge --no-ff -m "merge with no-ff" dev  --no-ff用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併看不出來曾經做過合併。
        git branch -d <name>      刪除分支
        git log --graph                   查看到分支合併圖
        git log --graph --pretty=oneline --abbrev-commit 查看到分支合併圖   
        git push origin branch-name   推送分支   
        git push origin branch-name   抓取分支  
        git checkout -b dev origin/dev 創建本地dev分支, 小夥伴要在dev分支上開發,就必須創建遠程origin的dev分支到本地
        git branch --set-upstream branch-name origin/branch-name  建立本地分支和遠程分支的關聯
    多人協作的工作模式通常是這樣:
        首先,可以試圖用git push origin <branch-name>推送自己的修改;
        如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;
        如果合併有衝突,則解決衝突,並在本地提交;
        沒有衝突或者解決掉衝突後,再用git push origin <branch-name>推送就能成功!
    ps:如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。

2>Bug分支:  --- 提供了一個stash功能

    git stash                          把當前工作現場“儲藏”起來,等以後恢復現場後繼續工作.
    git stash list                    查看stash儲藏內容
    git stash apply               恢復,但是恢復後,stash內容並不刪除
    git stash apply stash@{0} 恢復指定的stash
    git stash drop                刪除stash內容
    git stash pop                 恢復+刪除stash內容

3>Feature分支:

    每添加一個新功能,最好新建一個feature分支
    開發一個新feature,最好新建一個分支;
    如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>強行刪除。

7.Rebase:

    git rebase 特點:把分叉的提交歷史“整理”成一條直線,看上去更直觀。缺點是本地的分叉提交已經被修改過了。

8.標籤:

1>創建標籤:

    git tag <tagname>               用於新建一個標籤,默認爲HEAD
    git tag <tagname> <commit_id>   用於新建一個標籤,指定一個commit id
    git tag -a <tagname> -m "tag information"    可以指定標籤信息,默認爲HEAD
    git tag -a <tagname> -m "tag information" commit id    可以指定標籤信息,指定一個commit id
    git tag                              查看所有標籤。PS:標籤不是按時間順序列出,而是按字母排序的。
    git show <tagname>                   查看標籤信息
PS: 標籤總是和某個commit掛鉤。如果這個commit既出現在master分支,又出現在dev分支,那麼在這兩個分支上都可以看到這個標籤。

2>操作標籤

    git tag -d <tagname>可以刪除一個本地標籤;
    git push origin <tagname>可以推送一個本地標籤;
    git push origin --tags可以推送全部未推送過的本地標籤;
    git push origin :refs/tags/<tagname>可以刪除一個遠程標籤。PS:先刪除本地標籤

9.自定義Git:

    git config --global color.ui true   Git顯示顏色,會讓命令輸出看起來更醒目
    在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件。
不需要從頭寫.gitignore文件,GitHub已經爲我們準備了各種配置文件,只需要組合一下就可以使用了。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore
    忽略文件的原則是:
    忽略操作系統自動生成的文件,比如縮略圖等;
    忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;
    忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。
    忽略某些文件時,需要編寫.gitignore;
    .gitignore文件本身要放到版本庫裏,並且可以對.gitignore做版本管理!
    git add -f App.class   如果你確實想添加該文件,可以用-f強制添加到Git:

10.配置:

1>配置別名:

    git config --global alias.st status   告訴Git,以後st就表示status
    git config --global alias.co checkout
    git config --global alias.ci commit
    git config --global alias.br branch
    git config --global alias.last 'log -1'   配置一個git last,讓其顯示最後一次提交信息
    git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"     甚至還有人喪心病狂地把lg配置成

2>配置文件:

    1.每個倉庫的Git配置文件都放在.git/config文件中
    2.當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中

11.搭建Git服務器:

    sudo apt-get install git    安裝git
    sudo adduser git            創建一個git用戶,用來運行git服務

 

 

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