乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      git 學習筆記

       印度阿三17 2019-04-21

      1. 前言

        首先上一張別人整理好的圖:

      ?

      ?2. git 介紹

        git 是分布式版本控制系統(tǒng)

        集中式 vs 分布式 (SVN vs GIT)

      ?    SVN和 Git 主要的區(qū)別在于歷史版本維護的位置,SVN 在中央服務(wù)器,而 git 歷史版本存在于每個本地倉庫

          Git本地倉庫包含代碼庫還有歷史庫,在本地的環(huán)境開發(fā)就可以記錄歷史而SVN的歷史庫存在于中央倉庫,每次對比與提交代碼都必須連接到中央倉庫才能進行

          這樣的好處在于:

            自己可以在脫機環(huán)境查看開發(fā)的版本歷史

            多人開發(fā)時如果充當中央倉庫的Git倉庫掛了,可以隨時創(chuàng)建一個新的中央倉庫然后同步就立刻恢復了中央庫

          

      ?3. Git 命令

      ?

      3.1 git 配置

      ?

      $ git config --global user.name "Your Name"
      $ git config --global user.email "email@example.com"

      ?

      ?git config命令的--global參數(shù),表明這臺機器上的所有Git倉庫都會使用這個配置,也可以對某個倉庫指定不同的用戶名和郵箱地址。

      ?

      3.2 創(chuàng)建版本庫

      ?

      初始化一個git倉庫

      $ git init

      ?

      ?

      添加文件到git倉庫

      包括兩步:

      $ git add <file>
      $ git commit -m "description"

      ?

      git add可以反復多次使用,添加多個文件,git commit可以一次提交很多文件,-m后面輸入的是本次提交的說明,可以輸入任意內(nèi)容。

      ?

      3.3 查看工作區(qū)狀態(tài)

      $ git status

      ?

      ?

      3.4 查看修改內(nèi)容

      $ git diff
      $ git diff --cached
      $ git diff HEAD -- <file>

      ?

      ?

      • git diff 可以查看工作區(qū)(work dict)和暫存區(qū)(stage)的區(qū)別
      • git diff --cached 可以查看暫存區(qū)(stage)和分支(master)的區(qū)別
      • git diff HEAD -- <file> 可以查看工作區(qū)和版本庫里面最新版本的區(qū)別

      ?

      3.5 查看提交日志

      $ git log

      ?

      簡化日志輸出信息

      $ git log --pretty=oneline

      ?

      ?

      ?3.6 查看命令歷史

      $ git reflog

      ?

      ?

      3.7 版本回退

      $ git reset --hard HEAD^

      以上命令是返回上一個版本,在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本是HEAD^^,往上100個版本寫成HEAD~100。

      回退到指定版本

      $ git reset --hard commit_id

      ?

      commit_id是版本號,是一個用SHA1計算出的序列

      ?

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

      工作區(qū):在電腦里能看到的目錄; 版本庫:在工作區(qū)有一個隱藏目錄.git,是Git的版本庫。 Git的版本庫中存了很多東西,其中最重要的就是稱為stage(或者稱為index)的暫存區(qū),還有Git自動創(chuàng)建的master,以及指向master的指針HEAD。

      ?

      ?

      進一步解釋一些命令:

      • git add實際上是把文件添加到暫存區(qū)
      • git commit實際上是把暫存區(qū)的所有內(nèi)容提交到當前分支

      ?

      3.8 撤銷修改

      丟棄工作區(qū)的修改

      $ git checkout -- <file>

      該命令是指將文件在工作區(qū)的修改全部撤銷,這里有兩種情況:

      1. 一種是file自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài);
      2. 一種是file已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。

      總之,就是讓這個文件回到最近一次git commit或git add時的狀態(tài)。

      ?

      ?丟棄暫存區(qū)的修改

      ?分兩步: 第一步,把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū):

      $ git reset HEAD <file>

      ?

      第二步,撤銷工作區(qū)的修改

      $ git checkout -- <file>

      ?

      ?

      小結(jié):

      1. 當你改亂了工作區(qū)某個文件的內(nèi)容,想直接丟棄工作區(qū)的修改時,用命令git checkout -- <file>。

      2. 當你不但改亂了工作區(qū)某個文件的內(nèi)容,還添加到了暫存區(qū)時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了第一步,第二步按第一步操作。

      3. 已經(jīng)提交了不合適的修改到版本庫時,想要撤銷本次提交,進行版本回退,前提是沒有推送到遠程庫。

      ?

      ?3.9 刪除文件

      $ git rm <file>

      ?

      ?git rm <file>相當于執(zhí)行

      $ rm <file>
      $ git add <file>

      ?

      ?

      進一步的解釋

      Q:比如執(zhí)行了rm text.txt 誤刪了怎么恢復? A:執(zhí)行git checkout -- text.txt 把版本庫的東西重新寫回工作區(qū)就行了

      Q:如果執(zhí)行了git rm text.txt我們會發(fā)現(xiàn)工作區(qū)的text.txt也刪除了,怎么恢復? A:先撤銷暫存區(qū)修改,重新放回工作區(qū),然后再從版本庫寫回到工作區(qū)

      $ git reset head text.txt
      $ git checkout -- text.txt

      ?

      Q:如果真的想從版本庫里面刪除文件怎么做? A:執(zhí)行git commit -m "delete text.txt",提交后最新的版本庫將不包含這個文件

      ?

      遠程倉庫

      創(chuàng)建SSH Key

      $ ssh-keygen -t rsa -C "youremail@example.com"

      ?

      關(guān)聯(lián)遠程倉庫

      $ git remote add origin https://github.com/username/repositoryname.git

      推送到遠程倉庫

      $ git push -u origin master

      ?

      ?-u 表示第一次推送master分支的所有內(nèi)容,此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改。

      ?

      從遠程克隆

      $ git clone https://github.com/usern/repositoryname.git

      ?

      ?

      分支

      創(chuàng)建分支

      $ git branch <branchname>

      ?

      ?

      查看分支

      $ git branch

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

      ?

      切換分支

      $ git checkout <branchname>

      ?

      ?

      創(chuàng)建 切換分支

      $ git checkout -b <branchname>

      ?

      ?

      合并某分支到當前分支

      $ git merge <branchname>

      ?

      ?

      刪除分支

      $ git branch -d <branchname>

      ?

      查看分支合并圖

      $ git log --graph

      ?

      當Git無法自動合并分支時,就必須首先解決沖突。解決沖突后,再提交,合并完成。用git log --graph命令可以看到分支合并圖。

      ?

      普通模式合并分支

      $ git merge --no-ff -m "description" <branchname>

      ?

      因為本次合并要創(chuàng)建一個新的commit,所以加上-m參數(shù),把commit描述寫進去。合并分支時,加上--no-ff參數(shù)就可以用普通模式合并,能看出來曾經(jīng)做過合并,包含作者和時間戳等信息,而fast forward合并就看不出來曾經(jīng)做過合并。

      ?

      保存工作現(xiàn)場

      $ git stash

      ?

      ?

      查看工作現(xiàn)場

      $ git stash list

      ?

      ?

      恢復工作現(xiàn)場

      $ git stash pop

      ?

      ?

      丟棄一個沒有合并過的分支

      $ git branch -D <branchname>

      查看遠程庫信息

      $ git remote -v

      ?

      ?

      在本地創(chuàng)建和遠程分支對應(yīng)的分支

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

      ?

      本地和遠程分支的名稱最好一致;

      ?

      從本地推送分支

      $ git push origin branch-name

      ?

      如果推送失敗,先用git pull抓取遠程的新提交;

      ?

      從遠程抓取分支

      $ git pull

      如果有沖突,要先處理沖突。

      ?

      標簽

      tag就是一個讓人容易記住的有意義的名字,它跟某個commit綁在一起。

      新建一個標簽

      $ git tag <tagname>

      命令git tag <tagname>用于新建一個標簽,默認為HEAD,也可以指定一個commit id。

      ?

      指定標簽信息

      $ git tag -a <tagname> -m <description> <branchname> or commit_id

      ?

      git tag -a <tagname> -m "blablabla..."可以指定標簽信息。

      ?

      PGP簽名標簽

      $ git tag -s <tagname> -m <description> <branchname> or commit_id

      git tag -s <tagname> -m "blablabla..."可以用PGP簽名標簽。

      ?

      查看所有標簽

      $ git tag

      ?

      ?

      推送一個本地標簽

      $ git push origin <tagname>

      ?

      ?

      推送全部未推送過的本地標簽

      $ git push origin --tags

      ?

      ?

      刪除一個本地標簽

      $ git tag -d <tagname>

      ?

      ?

      刪除一個遠程標簽

      $ git push origin :refs/tags/<tagname>

      ?

      ?

      rebase

      1. 合并多個commit為一個完整commit

      當我們在本地倉庫中提交了多次,在我們把本地提交push到公共倉庫中之前,為了讓提交記錄更簡潔明了,我們希望把如下分支B、C、D三個提交記錄合并為一個完整的提交,然后再push到公共倉庫。

      現(xiàn)在我們在測試分支上添加了四次提交,我們的目標是把最后三個提交合并為一個提交:

      ?

      ?

      也就是把 add b.py / add c.py / add d.py 合并為一個提交

      這里我們使用命令:

      git rebase -i  [startpoint]  [endpoint]
      其中-i的意思是--interactive,即彈出交互式的界面讓用戶編輯完成合并操作,[startpoint] [endpoint]則指定了一個編輯區(qū)間,如果不指定[endpoint],則該區(qū)間的終點默認是當前分支HEAD所指向的commit(注:該區(qū)間指定的是一個前開后閉的區(qū)間)。
      在查看到了log日志后,我們運行以下命令:
      git rebase -i 32d82b5

      ?然后我們會看到如下界面:

      ?

      ?上面未被注釋的部分列出的是我們本次rebase操作包含的所有提交,下面注釋部分是git為我們提供的命令說明。每一個commit id 前面的pick表示指令類型,git 為我們提供了以下幾個命令:

          pick:保留該commit(縮寫:p)
          reword:保留該commit,但我需要修改該commit的注釋(縮寫:r)
          edit:保留該commit, 但我要停下來修改該提交(不僅僅修改注釋)(縮寫:e)
          squash:將該commit和前一個commit合并(縮寫:s)
          fixup:將該commit和前一個commit合并,但我不要保留該提交的注釋信息(縮寫:f)
          exec:執(zhí)行shell命令(縮寫:x)
          drop:我要丟棄該commit(縮寫:d)

      ?

      ?

      根據(jù)我們的需求,我們將commit內(nèi)容編輯如下:

      ?

      保存退出,然后是注釋修改界面

      ?

      注釋內(nèi)容根據(jù)需要進行修改,也可以不修改,直接保存退出

      查看log記錄信息:

      ?

      ?

      2. 將某一段commit粘貼到另一個分支上

      當我們項目中存在多個分支,有時候我們需要將某一個分支中的一段提交同時應(yīng)用到其他分支中,就像下圖:

      我們希望將develop分支中的C~E部分復制到master分支中,這時我們就可以通過rebase命令來實現(xiàn)(如果只是復制某一兩個提交到其他分支,建議使用更簡單的命令:git cherry-pick)。

      ?在實際模擬中,我們創(chuàng)建了master和develop兩個分支:

      ?

      master 分支

      ?

      develop 分支

      ?

      ?

      我們使用命令的形式為:

      git rebase   [startpoint]   [endpoint]  --onto  [branchName]

      ?

      ?

      其中,[startpoint] [endpoint]仍然和上一個命令一樣指定了一個編輯區(qū)間(前開后閉),--onto的意思是要將該指定的提交復制到哪個分支上。
      所以,在找到C(41f40e4)和E(9c1423c)的提交id后,我們運行以下命令:

      git  rebase   41f40e4^   9c1423c   --onto master

      ?

      ?注:因為[startpoint] [endpoint]指定的是一個前開后閉的區(qū)間,為了讓這個區(qū)間包含C提交,我們將區(qū)間起始點向后退了一步。


      運行完成后查看當前分支的日志:

      ?

      ?可以看到,C~E部分的提交內(nèi)容已經(jīng)復制到了G的后面了,大功告成?NO!我們看一下當前分支的狀態(tài):

      ?

      當前HEAD處于游離狀態(tài),實際上,此時所有分支的狀態(tài)應(yīng)該是這樣:

      所以,雖然此時HEAD所指向的內(nèi)容正是我們所需要的,但是master分支是沒有任何變化的,git只是將C~E部分的提交內(nèi)容復制一份粘貼到了master所指向的提交后面,我們需要做的就是將master所指向的提交id設(shè)置為當前HEAD所指向的提交id就可以了,即:

      ?

      ?

      此時就真正完成了粘貼到master分支。

      ?

      自定義 git

      git 提示顯示顏色

      $ git config --global color.ui true

      ?

      ?

      忽視特殊文件

      在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件。

      具體參考:https://github.com/github/gitignore

      ?

      配置別名

      $ git config --global alias.st status

      ?

      上面配置別名是將 status 定義別名為 st ,這里和linux中 alias 定義別名的概念是一致的。

      ?

      配置Git的時候,加上--global是針對當前用戶起作用的,如果不加,那只針對當前的倉庫起作用。

      配置文件在 ~/.gitconfig 文件中

      [root@localhost ~]# cat .gitconfig 
      [user]
          name = username
          email = email
      [color]
          ui = true
      [alias]
          st = status
          ci = commit
          br = branch
          ck = checkout
          unstage = reset HEAD
          last = log -1
          lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit

      ?

      參考鏈接:

        https://www./wiki/0013739516305929606dd18361248578c67b8067c8c017b000

        https://github.com/hongiii/gitNotes_from_Liao/blob/master/gitNotes_from_Liao.md#工作區(qū)暫存區(qū)和版本?%9

        https://www.jianshu.com/p/4a8f4af4e803

      ?

      來源:http://www./content-4-169701.html

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多