Git筆記整理

GitHub的創始人是Linus,使用C語言編寫,也是最初的Linux開發發起人。linux

集中式和分佈式的版本控制不一樣git

    集中式:版本庫是放在中央服務器中的,工做的時候要從服務器取得最新版本以後纔開始工做,工做完以後,在提交的中央服務器。必需要有網絡。github

    分佈式: 沒有中央控制系統,每一個人的電腦都有完整的版本庫,中央服務器只有來你們交換修改的文件,服務器

    git在不一樣系統上的安裝,自行百度。(我如今以爲Kali 系統作的愈來愈好了,以前在物理機上安裝的時候兼容性不是很好) 網絡

   git - config 命令的 --config 參數,表示這臺機器上的全部的倉庫都使用這個配置,固然也能夠對某個倉庫指定不一樣的用戶名和Email併發

  建立一個空的倉庫 我實在 opt目錄下建立了一個叫作learnGit的倉庫   (pwd是用來顯示當前的目錄) 注:建立完後當前目錄下生成一個 .git文件   經過命令:ls -ah 能夠查看隱藏文件ssh

注:Git只能跟蹤文本文件的控制,沒有辦法控制圖像視頻文件。另一點 Word文件時Microsoft的一種二進制文件,所以沒有辦法跟蹤Word上的改動文件。這裏也不推薦使用記事原本寫代碼,最好使用notepad++(默認編碼設置是UTF-8.)分佈式

將新建的文本添加到倉庫中:  使用 git add 提交文件  ,使用  git commit -m "備註「」  提交的跟蹤信息  測試

git  status 命令能夠幫助咱們時刻掌握倉庫當前的狀態, 下載咱們先將readme文件修改 ,而後使用該命令  git status (這個命令跟 linux 下 service status  相似)編碼

上面的顯示 readme文件修改了可是沒有提交  ,若是咱們不知道修改了什麼地方 可使用git diff 來查看修改的地方

能夠看咱們以前添加了一行,知道修改了以後咱們就就將它提交一遍(爲了放心,咱們在 git commit以前再次  git status一下)

最後提交 備註一下

可使用  git log 命令查看版本的歷史記錄

 

如今來看斑斑的回退  使用命令  git reset   -- hard  參數   (在 Git 很重 HEAD 表示當前的版本, 上一個版本是 HEAD^  ,上上一個版本是 HEAD^^ ,若是回退的較多能夠寫成這樣  HEAD ~100 表示第一百個版本)

使用 git log 看看,發現以前的一個記錄沒有了,

 若是想撤銷以前的操做,不要關閉窗口,繼續 git reset --hard 加上前面的 一串記錄數據

git 提供了一個記錄每次使用命令 命令 :   git reflog

總結   使用 git 回退版本  使用命令  :   git reset --hard commit_id

git的目錄理解:

   工做區: 就是咱們剛纔創建的一個文件 leanGit。在以前咱們建立倉庫的時候就產生了一個  .git 文件, 他是git的版本控制文件, git版本倉庫中有不少東西,其中最重要的是稱爲stage的暫存區,還有git建立的第一個master,以及master的一個指針 HEAD,(這裏我使用廖老師的圖)

在前面回顧一下  : 把文件添加到倉庫分紅了兩步:第一步第 使用 git  add 把文件添加進去I(其實是將文件修改添加到暫存區)--------第二步git commit  將暫存區的全部文件添加到當前分支,由於咱們在git版本庫的時候建立了惟一的一個master分支,因此 git commit就是往 master分支上提交更改。具體的提交變換工程圖解

git管理的是修改,而不是文件 ,爲了說明這個作一個實驗:

首先對readme問價添加一行 ,而後將他添加到倉庫暫存區 ,查看

能夠看到gitcommit 只負責對暫存區的修改,

 因此再次提交以後纔會看到結果,更新

 

如何撤銷修改:在文件提交的的時候發現,文件出現錯誤,爲了及時修改,git提示使用 git checkout -- file 能夠丟棄修改工做區的修改。

   廖雪峯說 一種是 readme自自改以後尚未放到暫存取,如今撤銷修改就回到和版本庫如出一轍的狀態,一種是readme已經次該添加到暫存區後,又作了修改,撤銷修改就回到添加暫存區後的狀態,總之就是讓這個文件回到最近一次  gitcommit或者 git add的狀態 。

下面的 使用 git commit 以後使用 git checkout  可是發現一旦使用 該命令 就不能撤銷,只能使用 git reset -- hard HEAD參數來進行版本的回退

root@kali:/opt/learnGit# cat readme.txt
readme here
learn github git is a version control system
 git is free software
   tianyaming
    add a new line
        add a new line "  my boss is stupid"
root@kali:/opt/learnGit# git commit -m "have use the git checkout"

[master 26aa3fd] have use the git checkout
 1 file changed, 1 insertion(+)
root@kali:/opt/learnGit#
root@kali:/opt/learnGit# cat readme.txt
readme here
learn github git is a version control system
 git is free software
   tianyaming
    add a new line
        add a new line "  my boss is stupid"
root@kali:/opt/learnGit# git checkout -- readme.txt
root@kali:/opt/learnGit# cat readme.txt
readme here
learn github git is a version control system
 git is free software
   tianyaming
    add a new line
        add a new line "  my boss is stupid"
root@kali:/opt/learnGit#
若是使用了git add提交了暫存區,慶幸的是你麼有使用commit提交  ,可使用 git reset HEAD 《file》來回退  以後在使用 git checkout清除工做區

來一個總結  ,場景一:當你改亂了工做區的某喲個內容,想直接丟掉工做區使用   git checkout -- file    ,場景二:當你改亂了某一個文件的內容,還添加到了暫存區,想丟棄修改,第一步使用 git reset HEAD  file 回到場景一 ,以後在使用 git checkout --file 丟掉

git 中還有一種操做就是刪除文件:

先添加一個新的文件   test.txt  以後使用 git add   、git  commit 提交 到版本控制庫

以後使用rm 命令刪除文件  test ,刪除以後版本庫中的並無刪除,因此使用  命令   git rm test 刪除版本庫 以後使用 git commit 提交版本庫  (注:git checkout 的做用就是用版本庫替換工做區版本)

遠程倉庫的操做

 首先就是在本地使用ssh建立密鑰對,  才用戶倉庫目錄下面看看,有沒有 .ssh 目錄  ,若是有在看下面有木有id_rsa和 id_rsa.pub兩個文件,若是存在直接跳轉下一步

 

使用 ssh 建立 郵箱GitHub帳戶的祕鑰對  命令:  ssh-keygen -t rsa -C " 1214tian@sina.com"   以後會在用戶佔下面產生祕鑰對,複製 公鑰到GitHub上

如今咱們須要將咱們的本地倉庫和GitHub上的倉庫關聯起來,首先登錄GitHub帳戶建立以個git倉庫 learnGit

如今將本地倉庫關聯到GitHub上,使用命令:   git remote add origin git@github.com:SueKayTian/learnGit.git

關聯以後將本地倉庫的文件所有推送的遠程GitHub上 使用命令  :   git push -u origin master

本地內容推送到遠程,其實是將當前分支master推送到遠程, 因爲遠程是空的,咱們第一次推送的master的時候,加上了參數 -u, 這樣GIt 不但會將本地的master分支內容推送到遠程master分支,還會將本地的master和遠程的master關聯起來,在之後的推送和拉取中簡化命令

第一次關聯後推送的時候會彈出SSH警告 ,在這以後只要本地作了提交就可使用  git  push origin master 來推送

  分支管理:

  建立一個分支使用命令:   git checkout -b (分支名字)

git checkout 命令後面加上-b 參數表示建立並切換,至關於下面的命令  :

 git branch dev

git checkout dev

以後使用git branch命令查看列出全部分支,當前的分支結構後面會顯示一個 * 

那麼如何將 dev 的工做合併到master上面, 下面使用命令 將 dev 合併到master 分支上面,  git merge命令用於價格制定分支合併到當前分支下面,  合併以後就能夠放心的刪除以前的 Dev 分支

小結:

   查看分支 使用命令:  git  branch

  建立分支:  git branch <name>

  切換分支:  git  checkout <name>

 建立加上切換分支 : git checkout -b <nmae>

  合併分支  : git merge <name>

  刪除分支 : git branch -d <name>

解決衝突問題: 其實不少時候在合併的時候會出現衝突,該如何解決了  ?

首先咱們建立一個分支並遷移到當前分支之下, 

git  自動提示咱們當前master分支比遠程的master分支超前一個提交。這時咱們在當前master分支下修改 readme文件 ,如今 master和 featurel上都有了本身的型的提交。

這種狀況下git沒法進行快速的會合並,只能視圖將各自的修改合併,可是會出現衝突

 當git沒法自動合併分支的時候 ,就必須首先解決衝突問題,提提交在合併。結局衝突的辦法就是使用手動編輯的方法合併成咱們想要的內容,再次提交  可使用  命令 git log --graph 查看分支合併圖

 一般合併分支時,會丟掉分支信息,若是可能Git 使用 fast forward模式,可是在這種模式下,刪除分支以後,要強制禁止使用Fast foward模式, Git就會在merge時生成一個新的commit,,這樣 從分支歷史上就能夠看出分支信息

 下面使用 --no-ff 方式的git merge 測試

首先建立並切換到 Dev分支下面:   使用命令 : git checkout -b dev 

以後修改 readme文件 並提交到當前分支下,

合併的時候命令:   git merge --no-ff -m "merge with no-ff "dev   

以後使用日誌記錄來查看修改的歷史 : 使用嗎命令: git log --graph --pretty=oneline --abbrev-commit

在實際的開發中,咱們應該按照幾個基本的原則進行分支管理,首先master是很是穩健的分支,僅僅能用來發布新的版本,平時幹活的時候不能再上面幹活。幹活都是在相似Dev的分支上開發,以後再將Dev版本合併發哦master分支上面。每一個人都有本身的分支,時不時合併到Dev分支上面。

 bug 如何修復,

當你接到一個代號爲010的bug任務的時候,很天然的你會想建立一個issue-010來修復,可是若是當前正在Dev上進行的工做尚未提交,這個時候能夠利用 stash功能,能夠將當前的工做線程隱藏起來,等到之後恢復現場後繼續工做。

使用 命令 : git stash 

Feature功能在軟件開的過程當中總有不少功能會不斷地被添加進來 ,添加一個新的功能的時候由於不但願一些實驗性質的代碼,把主分支搞亂了,因此,每添加一個新的 功能,最好新建有個feature分支,在上面開發,完成後,再進行合併,最後刪除feature分支,

相關文章
相關標籤/搜索