介紹Git命令操做,必然要說起Github。git
Github是一個基於git的代碼託管平臺,主要爲開發者提供基於git倉庫的版本託管服務,並提供一個web界面。github
Github 由Chris Wanstrath, PJ Hyett 與Tom Preston-Werner三位開發者在2008年4月創辦。 總部位於美國舊金山。web
簡單介紹一下Git:shell
Linux的創始人Linus Torvalds在2015年開發了Git的原型程序。數據庫
Linux內核的更新速度在全世界也是數一數二。vim
Git 像是把數據看做是對小型文件系統的一組快照。 每次你提交更新,或在 Git 中保存項目狀態時,它主要對當時的所有文件製做一個快照並保存這個快照的索引。 爲了高效,若是文件沒有修改,Git 再也不從新存儲該文件,而是隻保留一個連接指向以前存儲的文件。 Git 對待數據更像是一個 快照流。安全
Git 有三種狀態,你的文件可能處於其中之一:已提交(committed)、已修改(modified)和已暫存(staged)。 已提交表示數據已經安全的保存在本地數據庫中。 已修改表示修改了文件,但還沒保存到數據庫中。 已暫存表示對一個已修改文件的當前版本作了標記,使之包含在下次提交的快照中。bash
基本的 Git 工做流程以下:網絡
- 在工做目錄中修改文件。
- 暫存文件,將文件的快照放入暫存區域。
- 提交更新,找到暫存區域的文件,將快照永久性存儲到 Git 倉庫目錄。
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 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 help <verb>
$ git <verb> --help
$ man git-<verb>
複製代碼
例如,要想得到 config 命令的手冊,執行
$ git help config
複製代碼
打開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初始化
,會獲得一個**.git目錄,這個.git目錄裏存儲管理當前目錄內容所須要的倉庫數據,又叫"附屬於該倉庫的工做樹"**:$ git init
查看當前Git倉庫的狀態和所在分支:$ git status
提交代碼(若是是add . 則說明是提交的全部改變過的文件,不然須要根據單獨的文件名分別上傳):$ git add .
保存倉庫的歷史記錄(將當前暫存區的文件世紀保存到倉庫的歷史記錄中,以便往後在工做樹中復原文件),記述一行提交信息:$ git commit -m "提交信息的概述"
若是發現備註不夠恰當,要修改上一條提交的備註信息:$ git commit --amend
若是想要記錄更詳細的提交信息,請不要 -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 查看剛剛提交的記錄
查看提交信息:$ git log
只顯示第一行提交信息:$ git log \-\-pretty=short
只顯示指定目錄、文件的日誌:$ git log 某文件名
顯示文件的改動,會對比文件的先後差異:$ git log -p
顯示具體文件的改動,會對比文件的先後差異:$ git log -p 文件名
$ git reflog
查看更改先後的差異(查看工做樹、暫存區、最新提交之間的差異):$ git diff
其中:
查看工做樹和最新提交的差異(養成好習慣,git commit以前先執行git diff HEAD):$ git diff HEAD
提交代碼:$ git push
經過master分支提交到遠程:$ git push -u origin "master"
查看所在分枝:$ git
切換分枝:$ git checkout \-\-master
此處咱們簡單瞭解一下VI的幾個命令,後面將會詳細介紹VI環境的四種模式。
a 光標以後插入/ A 行尾插入
i 光標以前插入/ I 行首插入
o 下一行插入 /O 上一行插入
:
連按兩次大寫Z
:w
:q
:wq
:q!
更詳細的vi/vim的介紹及相關命令請參考個人另外一篇文章:vim 小總結
當進行多個並行做業時,咱們會用到分枝。在這類並行開發的過程當中,每每同時存在多個最新的代碼狀態。
不一樣分支中,能夠同時進行徹底不一樣的做業,等該分支的做業完成以後再與master分支合併。
![]()
![]()
分支又分爲:
查看本地分支(帶星號的爲當前分支):$ git branch
查看遠程倉庫+本地倉庫的分支信息:$ git branch -a
建立並切換分枝:$ git checkout -b 分支名
建立分枝:$ git branch 分支名
切換分枝:$ git checkout 分支名
切換回上一個分支:$ git checkout -
合併分支:切換回master分支,$ git merge \-\-no-ff 須要合併的分支名
合併分支,須要各個分支先在各分支的領域裏提交代碼至遠程倉庫,然後由master分支對各個分支提交的內容進行合併。
合併某分支到當前分支:$ git merge <name>
刪除分枝:$ git branch -d
強制刪除分枝:$ git branch -D
以圖表形式查看分支(能夠看到各分支的合併狀態,清楚明瞭):**$ git log \-\-graph**
回溯歷史版本:$ git reset
回溯到某個指定狀態:$ git reset --hard 哈希值
查看當前倉庫的操做日誌(從日誌中找到哈希值)
:**$ git reflog**
消除衝突:
例如:
# Git教程
<<<<<<< HEAD
- feature-A 複製代碼
======= - fix-B
>>>>>>> fix-B
=======以上的部分是當前HEAD的內容,如下的部分是要合併的 fix-B 分支中的內容。
實際開發過程當中,每每須要刪除其中之一,因此在處理時,須要仔細分析衝突部分再修改。
解決衝突後,執行 $ git add 與 $ git commit 命令。
修改已經提交了的備註信息(此處須要懂一些vim的相關命令常識):\$ git commit \-\-amend
執行 git commit --amend 後,編輯器會啓動,按esc
再按 i
,進入insert插入模式,修改好後,再點擊esc
,打:x
,保存並退出。
修改並保存退出後,執行$ git log \-\-graph
命令,查看日誌中的內容是否修改爲功
壓縮提交歷史:$ git rebase -i
不少咱們提交了例如 拼寫錯誤等內容的修改,對於整個項目版本追溯的意義並不大,咱們並不但願在歷史記錄中看到這類提交,所以能夠選擇使用合併歷史提交記錄的方式,將此記錄與上一次有意義的提交記錄合併爲一次完美的提交
例如:git rebase -i HEAD-2
實際,git rebase -i HEAD-2 的做用是選定當前分支中包含HEAD在內的2個最新歷史記錄爲對象,打開編輯器,進行備註信息的修改,修改完後保存並退出編輯器,再經過git log --graph查看,會發現,哈希值已經不是原來的了。
合併git add 和 git commit 這兩個命令:$ git commit -am '備註內容'
對比修改文件:$ git diff
添加遠程倉庫到本地
(執行git remote add後,git會自動將git@github.com:/…遠程倉庫的名稱設置爲origin(標識符)):
$ git remote add origin git@github.com:user/new-repository.git
複製代碼
推送至遠程倉庫:$ git push -u origin master
-u 參數能夠在推送的同時,將origin倉庫的master分支設置爲本地倉庫當前分支的upstream(上游)。
添加了這個參數,未來運行git pull命令從遠程倉庫獲取內容時,本地倉庫的這個分支就能夠直接從roigin的master分支獲取內容,省去了另外添加參數的麻煩。
推送master意外的分支:
先切換到其餘分支
$ git checkout -b 分支名
再從意境切換到的分支上進行推送
$ git push -u origin 分支名
複製代碼
獲取遠程倉庫:$ git clone git@github.com:...
查看當前分支信息(本地和遠程origin):$ git branch -a
-a 參數能夠同時顯示本地倉庫和遠程倉庫的分支信息
獲取遠程倉庫的feature-D分支:$ git checkout -b feature-D origin/feature-D
獲取最新的遠程倉庫分支:$ git pull origin feature-D
vi/vim的介紹及相關命令請參考個人另外一篇文章:vim 小總結