Git簡易教程

參考博客:git

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


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

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

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

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

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

4. 若是git status告訴你有文件被修改過,用git diff能夠查看修改內容。指針

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

    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 "youremail@example.com",在用戶主目錄下,會

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

    (2)在GitHub上Add SSH Key。

    (3)在GitHub上 Create a new repository。

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

        git remote add origin git@github.com:scarliyang/learngit.git

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

        解決辦法以下:

            一、先輸入$ git remote rm origin

            二、再輸入$ git remote add origin git@github.com: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 git@github.com: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 git@github.com:michaelliao/bootstrap.git。必定要從本身的帳號下clone倉庫,

    這樣你才能推送修改。若是從開源庫的做者的倉庫地址git@github.com:twbs/bootstrap.git克隆,

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

    提交你的修改。即:

        在GitHub上,能夠任意Fork開源倉庫;

        本身擁有Fork後的倉庫的讀寫權限;

        能夠推送pull request給官方倉庫來貢獻代碼。

相關文章
相關標籤/搜索