Git的基本操做

Git與Github

介紹Git命令操做,必然要說起Github。git

GitHub介紹

Github是一個基於git的代碼託管平臺,主要爲開發者提供基於git倉庫的版本託管服務,並提供一個web界面。github

Github 由Chris Wanstrath, PJ Hyett 與Tom Preston-Werner三位開發者在2008年4月創辦。 總部位於美國舊金山。web

Git

簡單介紹一下Git:shell

Linux的創始人Linus Torvalds在2015年開發了Git的原型程序。數據庫

Linux內核的更新速度在全世界也是數一數二。vim

Git 像是把數據看做是對小型文件系統的一組快照。 每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的所有文件製做一個快照並保存這個快照的索引。 爲了高效,若是文件沒有修改,Git 再也不從新存儲該文件,而是隻保留一個連接指向以前存儲的文件。 Git 對待數據更像是一個 快照流安全

Git 有三種狀態,你的文件可能處於其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數據已經安全的保存在本地數據庫中。 已修改表示修改了文件,但還沒保存到數據庫中。 已暫存表示對一個已修改文件的當前版本作了標記,使之包含在下次提交的快照中。bash

基本的 Git 工做流程以下:網絡

  1. 在工做目錄中修改文件。
  2. 暫存文件,將文件的快照放入暫存區域。
  3. 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。

Git官方文檔編輯器

GitHub與Git的關聯

  • Git:開發者將源代碼存入"Git倉庫"的資料庫中
  • GitHub:是在網絡上提供Git倉庫的一項服務
  • GitHub與Git的關聯:GitHub上公開的軟件源碼是由Git進行管理,理解Git是熟練運用GitHub的關鍵所在

Git的初始設置

查看用戶名和郵箱地址

$ git config user.name
$ git config user.email
複製代碼

修改用戶名和郵箱地址

$ git config --global user.name "Firstname Lastname"
$ git config --global user.email "your_email@example.com"
複製代碼

也能夠經過git的配置文件"~/.gitconfig"進行修改

提升命令輸出的可讀性 (git 命令行顯示呈現color 高亮)

$ git config --global color.ui auto
複製代碼

$ git config --global color.ui auto 這個命令至關於

$ git config --global color.diff auto
$ git config --global color.status auto
$ git config --global color.branch auto
$ git config --global color interactive auto
複製代碼

查看配置是否生效

$ git config --list
複製代碼

獲取Git幫助

若你使用 Git 時須要獲取幫助,有三種方法能夠找到 Git 命令的使用手冊:

$ git help <verb>
$ git <verb> --help
$ man git-<verb>
複製代碼

例如,要想得到 config 命令的手冊,執行

$ git help config
複製代碼

Git的命令操做

從Github上clone已有倉庫

打開Github,打開須要拷貝的倉庫連接,點擊右側按鈕:Clone or download,得到一個git地址(例如:git@github.com:user-name/new-repository.git)

$ git clone git@github.com:user-name/new-repository.git
Cloning into 'new-repository'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

$ cd new-repository
複製代碼

注意:這裏會要求輸入GitHub上設置的公開密鑰的密碼,認證後,倉庫便會被clone到倉庫名後的目錄中,將想要公開的代碼提交至這個倉庫再push到GitHub的倉庫中,代碼便會被公開。

Git基本操做

  1. 進行Git初始化,會獲得一個**.git目錄,這個.git目錄裏存儲管理當前目錄內容所須要的倉庫數據,又叫"附屬於該倉庫的工做樹"**:$ git init

  2. 查看當前Git倉庫的狀態所在分支$ git status

  3. 提交代碼(若是是add . 則說明是提交的全部改變過的文件,不然須要根據單獨的文件名分別上傳):$ git add .

  4. 保存倉庫的歷史記錄(將當前暫存區的文件世紀保存到倉庫的歷史記錄中,以便往後在工做樹中復原文件),記述一行提交信息$ git commit -m "提交信息的概述"

  5. 若是發現備註不夠恰當,要修改上一條提交的備註信息:$ git commit --amend

  6. 若是想要記錄更詳細的提交信息請不要 -m,直接使用$ git commit ,執行後,VI的編輯模式會自動啓動,會看到:

    # Please enter the commit message for your changes. Lines starting
    # with '#' will be ignored, and an empty message aborts the commit.
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    # (use "git rm --cached <file>..." to unstage) #
    # new file: README.md
    #
    複製代碼

    在編輯器中記述提交信息的格式以下:

    第一行:用一行文字簡述提交的更改內容

    第二行:空行

    第三行之後:記述更改的緣由和詳細內容

    如圖所示:

    編輯完成後,退出VI模式,按esc再打:wq,保存並退出,而後再經過 $ git log 查看剛剛提交的記錄

  7. 查看提交信息:$ git log

    • 只顯示第一行提交信息:$ git log \-\-pretty=short

    • 只顯示指定目錄、文件的日誌:$ git log 某文件名

    • 顯示文件的改動,會對比文件的先後差異:$ git log -p

    • 顯示具體文件的改動,會對比文件的先後差異:$ git log -p 文件名

      查看文件的操做日誌(能夠看到操做版本的哈希值):$ git reflog

  8. 查看更改先後的差異(查看工做樹、暫存區、最新提交之間的差異):$ git diff

    其中:

    • "+",表示新添加的行
    • "-"號,表示被刪除的行
  9. 查看工做樹和最新提交的差異(養成好習慣,git commit以前先執行git diff HEAD):$ git diff HEAD

  10. 提交代碼:$ git push

  11. 經過master分支提交到遠程:$ git push -u origin "master"

  12. 查看所在分枝:$ git

  13. 切換分枝:$ git checkout \-\-master

VI編輯模式命令

此處咱們簡單瞭解一下VI的幾個命令,後面將會詳細介紹VI環境的四種模式。

  1. 進入插入模式(INSERT):
    • a 光標以後插入/ A 行尾插入
    • i 光標以前插入/ I 行首插入
    • o 下一行插入 /O 上一行插入
  2. 進入命令模式(Command):
  3. 保存文件並退出:連按兩次大寫Z
  4. 保存不退出::w
  5. 系統退出VI,進入到shell模式::q
  6. 保存並退出::wq
  7. 不保存,強制退出::q!

更詳細的vi/vim的介紹及相關命令請參考個人另外一篇文章:vim 小總結

Git分支操做

當進行多個並行做業時,咱們會用到分枝。在這類並行開發的過程當中,每每同時存在多個最新的代碼狀態。

不一樣分支中,能夠同時進行徹底不一樣的做業,等該分支的做業完成以後再與master分支合併。

分支又分爲:

  • 特性分支Topic(完成特定任務的分支)
  • 主幹分支master

分支相關命令:

  1. 查看本地分支(帶星號的爲當前分支):$ git branch

  2. 查看遠程倉庫+本地倉庫的分支信息:$ git branch -a

  3. 建立並切換分枝:$ git checkout -b 分支名

  4. 建立分枝:$ git branch 分支名

  5. 切換分枝:$ git checkout 分支名

  6. 切換回上一個分支:$ git checkout -

  7. 合併分支:切換回master分支,$ git merge \-\-no-ff 須要合併的分支名

    合併分支,須要各個分支先在各分支的領域裏提交代碼至遠程倉庫,然後由master分支對各個分支提交的內容進行合併。

  8. 合併某分支到當前分支:$ git merge <name>

  9. 刪除分枝:$ git branch -d

  10. 強制刪除分枝:$ git branch -D

  11. 以圖表形式查看分支(能夠看到各分支的合併狀態,清楚明瞭):**$ git log \-\-graph**

  12. 回溯歷史版本:$ git reset

  13. 回溯到某個指定狀態:$ git reset --hard 哈希值

  14. 查看當前倉庫的操做日誌(從日誌中找到哈希值)**$ git reflog**

  15. 消除衝突:

    例如:

    # Git教程

    <<<<<<< HEAD

    - feature-A 
    複製代碼

    ======= - fix-B

    >>>>>>> fix-B

    =======以上的部分是當前HEAD的內容,如下的部分是要合併的 fix-B 分支中的內容。

    實際開發過程當中,每每須要刪除其中之一,因此在處理時,須要仔細分析衝突部分再修改。

    解決衝突後,執行 $ git add 與 $ git commit 命令。

更改提交的操做:

  1. 修改已經提交了的備註信息(此處須要懂一些vim的相關命令常識):\$ git commit \-\-amend

    執行 git commit --amend 後,編輯器會啓動,按esc 再按 i ,進入insert插入模式,修改好後,再點擊esc,打:x,保存並退出。

    修改並保存退出後,執行$ git log \-\-graph命令,查看日誌中的內容是否修改爲功

  2. 壓縮提交歷史:$ git rebase -i

    不少咱們提交了例如 拼寫錯誤等內容的修改,對於整個項目版本追溯的意義並不大,咱們並不但願在歷史記錄中看到這類提交,所以能夠選擇使用合併歷史提交記錄的方式,將此記錄與上一次有意義的提交記錄合併爲一次完美的提交

    例如:git rebase -i HEAD-2

    實際,git rebase -i HEAD-2 的做用是選定當前分支中包含HEAD在內的2個最新歷史記錄爲對象,打開編輯器,進行備註信息的修改,修改完後保存並退出編輯器,再經過git log --graph查看,會發現,哈希值已經不是原來的了。

  3. 合併git add 和 git commit 這兩個命令:$ git commit -am '備註內容'

  4. 對比修改文件:$ git diff

遠程倉庫的操做:

  1. 添加遠程倉庫到本地(執行git remote add後,git會自動將git@github.com:/…遠程倉庫的名稱設置爲origin(標識符)):

    $ git remote add origin git@github.com:user/new-repository.git
    複製代碼
  2. 推送至遠程倉庫:$ git push -u origin master

    -u 參數能夠在推送的同時,將origin倉庫的master分支設置爲本地倉庫當前分支的upstream(上游)。

    添加了這個參數,未來運行git pull命令從遠程倉庫獲取內容時,本地倉庫的這個分支就能夠直接從roigin的master分支獲取內容,省去了另外添加參數的麻煩。

  3. 推送master意外的分支:

    先切換到其餘分支
    $ git checkout -b 分支名
    再從意境切換到的分支上進行推送
    $ git push -u origin 分支名
    複製代碼
  4. 獲取遠程倉庫:$ git clone git@github.com:...

  5. 查看當前分支信息(本地和遠程origin):$ git branch -a

    -a 參數能夠同時顯示本地倉庫和遠程倉庫的分支信息

  6. 獲取遠程倉庫的feature-D分支:$ git checkout -b feature-D origin/feature-D

  7. 獲取最新的遠程倉庫分支:$ git pull origin feature-D

vi/vim的介紹及相關命令

vi/vim的介紹及相關命令請參考個人另外一篇文章:vim 小總結

相關文章
相關標籤/搜索