Git簡易教程

參考博客:

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013743256916071d599b3aed534aaab22a0db6c4e07fd0000


1. 初始化一個Git倉庫,使用git init命令。

2. 添加文件到Git倉庫,分兩步:

    第一步,使用命令git add <file>,注意,可反覆多次使用,添加多個文件;

    第二步,使用命令git commit,完成。

3. 使用git status命令, 掌握工作區的狀態。

4. 如果git status告訴你有文件被修改過,用git diff可以查看修改內容。

5. git log命令查看歷史記錄。

    git log --pretty=oneline


6. 版本回退

    git reset --hard HEAD^    // HEAD指向的版本就是當前版本。

    git reset --hard commit_id

        commit_id是版本號,用git log查看。即Git允許我們在版本的歷史之間穿梭前,

        用git log可以查看提交歷史,以便確定要回退到哪個版本。要重返未來,用git log

        查看命令歷史,以便確定要回到未來的哪個版本。


7. 工作區和暫存區

    工作區:使用git init命令初始化的目錄。

    版本庫:工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

            git add命令把要提交的所有修改放到暫存區(Stage)

            git commit可一次性把暫存區的所有修改提交到分支(master)

    管理修改:每次修改,如果不add到暫存區,那就不會加入到commit中。

    撤銷修改:

        1.當改亂工作區某個文件的內容後想直接丟棄工作區的修改時,用命令git checkout -- file

        2.當不但改亂工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,

           第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。

        3.已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,

           不過前提是沒有推送到遠程庫。

    刪除文件:rm test.txt    // 刪除工作區的文件

        <1> git rm test.txt    // 從版本庫中刪除該文件

               git commit -m "remove test.txt"    // 提交到版本庫

        <2> git checkout -- test.txt    // 用版本庫的版本替換工作區的版本


8. 遠程倉庫GitHub

    (1)創建SSH Key。ssh-keygen -t rsa -C "[email protected]",在用戶主目錄下,會

        生成.ssh目錄,這個目錄下生成id_rsa和id_rsa.pub這兩個文件。

    (2)在GitHub上Add SSH Key。

    (3)在GitHub上 Create a new repository。

    (4)把本地倉庫的內容推送到GitHub倉庫,在本地的learngit倉庫下運行命令:

        git remote add origin [email protected]:scarliyang/learngit.git

        錯誤:提示出錯信息:fatal: remote origin already exists.

        解決辦法如下:

            1、先輸入$ git remote rm origin

            2、再輸入$ git remote add origin [email protected]:oscarliyang/gitdemo.git 

    (5)把本地庫的所有內容推送到遠程庫上

        git push -u origin master  // 第一次推送master分支的所有內容時加上了-u參數

        git push origin master     // 之後提交只需要這樣

    (6)從遠程庫克隆

            <1>先創建遠程庫:創建一個新的倉庫,勾選Initialize this repository with a README,

                這樣GitHub會自動爲我們創建一個README.md文件

            <2>再從遠程庫克隆:git clone [email protected]:oscarliyang/gitdemo.git 

            注:Git支持多種協議,默認的git://使用ssh,但也可以使用https等其他協議。


9. 分支管理

    在Git裏,主分支即master分支。HEAD嚴格來說不是指向提交,而是指向master,master纔是

    指向提交的,所以,HEAD指向的就是當前分支。

    (1)創建與合併分支

        <1>首先,我們創建dev分支,然後切換到dev分支:

                git checkout -b dev    // git checkout命令加上-b參數表示創建並切換,

                相當於以下兩條命令:  git branch dev  和  git checkout dev

        <2>然後,用git branch命令查看當前分支:

                git branch// git branch命令會列出所有分支,當前分支前面會標一個*號。

        <3>提交:git add readme.txt 

                        git commit -m "branch test"

        <4>切換回master分支:git checkout master

        <5>把dev分支的工作成果合併到master分支上:

                git merge dev//用於合併指定分支到當前分支

        <6>刪除dev分支:git branch -d dev

    (2)解決衝突

        即分支和master都修改了同一個文件,導致衝突。則在提交到master分支時,先需要修改

        衝突內容,再add/commit。看到分支的合併情況:

            git log --graph --pretty=oneline --abbrev-commit

        最後刪除分支。

    (3)分支管理策略

        --no-ff參數,表示禁用Fast forward:git merge --no-ff -m "merge with no-ff" dev

        在實際開發中,我們應該按照幾個基本原則進行分支管理:首先,master分支應該是非常

        穩定的,也就是僅用來發布新版本,平時不能在上面幹活;那在哪幹活呢?幹活都在dev分

        支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發佈時,再把dev分支合

        併到master上,在master分支發佈1.0版本;你和你的小夥伴們每個人都在dev分支上幹活,

        每個人都有自己的分支,時不時地往dev分支上合併就可以了。

    注:合併分支時,加上--no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經

            做過合併,而fast forward合併就看不出來曾經做過合併。

    (4)Bug分支

        修復bug時,我們會通過創建新的bug分支進行修復,然後合併,最後刪除;

        當手頭工作沒有完成時,先把工作現場git stash儲藏一下,然後去修復bug,修復後,

        再git stash pop,回到工作現場。

    (5)Feature分支

        開發一個新feature,最好新建一個分支;如果要丟棄一個沒有被合併過的分支,可以通過

        git branch -D <分支名>強行刪除。

    (6)多人協作

        當從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,

        並且,遠程倉庫的默認名稱是origin。

        查看遠程庫的信息,用git remote

        查看遠程庫詳細信息,用git remote -v

        多人協作的工作模式通常是這樣:

            首先,可以試圖用git push origin branch-name推送自己的修改;

            如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;

            如果合併有衝突,則解決衝突,並在本地提交;

            沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!

            注:如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關係沒有

                創建,用命令 git branch --set-upstream branch-name origin/branch-name

        抓取分支:在本地創建和遠程分支對應的分支(本地和遠程分支的名稱最好一致),使用

                git checkout -b branch-name origin/branch-name


10.標籤管理

    發佈一個版本時,我們通常先在版本庫中打一個標籤,這樣,就唯一確定了打標籤時刻的版本。

    將來無論什麼時候,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。所以,

    標籤也是版本庫的一個快照。Git的標籤雖然是版本庫的快照,但其實它就是指向某個commit的

    指針(跟分支很像對不對?但是分支可以移動,標籤不能移動),所以,創建和刪除標籤都是

    瞬間完成的。

     (1)創建標籤

        首先,切換到需要打標籤的分支上。

        然後,敲命令git tag <name>就可以打一個新標籤。

        命令git tag查看所有標籤。

        默認標籤是打在最新提交的commit上的,git tag v0.9 commitid 對指定commitid打標籤

        標籤不是按時間順序列出,而是按字母排序的。可以用git show <tagname>查看標籤信息

        創建帶有說明的標籤,用-a指定標籤名,-m指定說明文字:

            git tag -a v0.1 -m "version 0.1 released" 3628164

        還可以通過-s用私鑰簽名一個標籤:

            git tag -s v0.2 -m "signed version 0.2 released" fec145a

     (2)操作標籤

        刪除標籤:git tag -d v0.1   //創建的標籤都只存儲在本地,不會自動推送到遠程

        推送某個標籤到遠程:git push origin <tagname>

        一次性推送全部尚未推送到遠程的本地標籤:git push origin --tags

        刪除推送到遠程的標籤:

            git tag -d v0.9    //先從本地刪除

            git push origin :refs/tags/v0.9    //然後從遠程刪除


11.使用GitHub

    參與一個開源項目:點“Fork”就在自己的賬號下克隆了一個bootstrap倉庫,然後,從自己的賬號

    下 clone:git clone [email protected]:michaelliao/bootstrap.git。一定要從自己的賬號下clone倉庫,

    這樣你才能推送修改。如果從開源庫的作者的倉庫地址[email protected]:twbs/bootstrap.git克隆,

    因爲沒有權限,你將不能推送修改。可以在GitHub上發起一個pull request,向開源項目的官方庫

    提交你的修改。即:

        在GitHub上,可以任意Fork開源倉庫;

        自己擁有Fork後的倉庫的讀寫權限;

        可以推送pull request給官方倉庫來貢獻代碼。


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