mkdir learngit //使用命令建立一個目錄 cd learngit //進入這個目錄 pwd //用於顯示當前目錄
git init
第一步:git add <file> 第二步:git commit -m '本次提交的說明'
git status:查看當前Git倉庫的狀態,是否有文件沒有提交,讓咱們掌握倉庫最新的狀態 git diff: 查看不一樣,當修改文件後,能夠查看修改了什麼內容(只適用於文本文件)
git log:顯示從最近到最遠的提交日誌 git log --pretty=oneline:若是信息太多,使用這行命令
HEAD
表示當前版本,上一個版本就是HEAD^
,上一個版本就是HEAD^^
,固然往上100個版本寫100個^
比較容易數不過來,因此寫成HEAD~100
。882e1e0...67hko896
的是commit id 版本號git reset --hard HEAD^
: 回退到上一個版本此時,當再次使用git log
命令時,發現以前的版本已經消失了,此時想要再次回到那個版本,有兩種方式:一種是當命令窗口沒有關閉時,找到那個版本的版本號,如:81ac3c5
,此時又回到最新的那個版本的命令是:git reset --hard 81ac3c5
若是已通過去好久了,已經記不得想要回退的版本的ID號,此時能夠依據這個命令來找回版本號:html
git reflog
工做區(Working Directory):就是能在電腦上看到的目錄,好比倉庫文件夾java
版本庫(Repository):工做區裏有一個隱藏目錄.git
,這個不算工做區,而是git的版本庫前面咱們講了往Git版本庫裏添加文件的時候,分兩步,這兩步更詳細的說是:git
第一步使用git add
把文件添加進去,實際上就是把文件修改添加到暫存區;github
第二步使用git commit
提交修改,其實是把暫存區的全部內容提交到當前分支由於咱們建立Git版本庫的時候,Git自動爲咱們建立了惟一的一個master
分支,而git commit
就是往 master
分支上提交更改。也能夠簡單理解爲須要提交的文件修改統統放到了暫存區,等到要提交的時候,一次性提交暫存區裏全部的文件到分支。數據庫
注意點:服務器
git diff
是工做區與暫存區的對比
git diff -- cached
是暫存區與分支的對比
git diff HEAD -- <file>
是工做區與分支的對比app
在如下三種狀況下能夠撤銷修改:分佈式
git checkout -- <file>
git reset HEAD <file>
//把暫存區的修改回退到工做區git checkout -- <file>
//把工做區的修改撤銷git reset --hard HEAD^
當咱們使用 rm
命令或者直接在圖形界面刪除文件後,只是修改了工做區,若先使用 git rm <file>
命令刪除文件,此時不只修改了工做區,還修改了暫存區,此時使用撤銷修改的命令還能找回被刪除的文件。當刪除操做被提交到分支後,只能使用版本回退操做來找回刪除的文件。學習
注:git rm <file>
命令至關於先執行了rm
命令 ,而後把工做區的修改添加到了暫存區,也就是說使用git rm <file>
命令後不只工做區的文件被刪除了,也把刪除操做添加到了暫存區。這就告訴咱們,要想快速刪除文件並提交到分支,只需執行git rm <file>
命令後commit
就好了,若是想要更加謹慎,能夠先使用rm
命令刪除工做區中的文件,此時若想要撤銷刪除可使用git checkout -- <file>
命令;若是想要添加修改操做到暫存區,使用git rm <file>
命令,到了這一步若是想要撤銷刪除能夠先使用git reset HEAD <file>
命令撤銷對暫存區的修改,而後使用 git checkout -- <file>
命令來撤銷對工做區的修改;若是已經把修改操做提交到了分支,此時想要撤銷刪除,找回文件則只能使用版本回退操做,即便用git reset --hard HEAD^
命令。fetch
當咱們的系統以前從未使用SSH進行加密傳輸操做時,咱們應該首先在用戶主目錄下建立SSH Key,由於你的本地Git 倉庫和GitHub 倉庫之間的傳輸是經過SSH 加密的。
git remote add origin git@server-name:path/repo-name.git
關聯後,使用命令git push -u origin master
第一次推送master
分支的全部內容
例如:
此後,每次本地提交後,要想實現遠程倉庫的同步,只需使用命令git push origin master
推送最新的修改
在合適的目錄下使用命令
git clone git@server-name:path/repo-name.git
例如:
dev
的分支git branch dev
dev
分支git checkout dev
git checkout -b dev //加上-b 參數表示建立並切
git branch //這個命令會列出全部的分支,而且在當前分支上會標註星號*
dev
分支的工做合併分支master
上git checkout master //首先切換到master分支git merge dev //合併指定分支(dev)到當前分支(master)
git branch -d dev //刪除分支 dev
當咱們在兩個分支上對同一個文件進行修改,而且修改的內容不同,此時合併這兩個分支時就會產生衝突
此時查看該修改的文件時,就會發現Git用<<<<<<<
,=======
,>>>>>>>
標記出不一樣分支的內容,此時咱們須要手動修改文件,刪除Git的標記,而後將修改後的文件先添加到暫存區,而後提交到分支
提交成功後使用命令:git log --graph --pretty=oneline --abbrev-commit
能夠看到分支合併圖
一般,合併分支的時候,Git會使用Fast forward
模式,當是在這種模式下刪除分支後就會丟掉分支的信息,若是咱們想要在刪除分支後還想在分支歷史上看到分支的信息就能夠強制禁用Fast forward
模式,此時Git 會在合併分支時生成一個新的commit
:強制禁用Fast forward
模式的命令:
git merge --no-ff -m 'merge with no-ff' dev //由於本次合併會生成一個commit ,因此須要加上 -m 參數說明
咱們在開發過程當中須要常常修復軟件中發現的bug,在git中咱們就能夠經過建立一個臨時的分支來修復bug,修復bug後合併分支,而後刪除臨時分支
可是若是咱們在dev
分支上的內容還沒提交怎麼辦,此時咱們可使用命令來保存現場:
git stash
此時再查看Git庫的狀態就是乾淨的。當咱們在master
分支上經過建立臨時分支修復bug後,再checkout
回dev
分支時,咱們有兩條命令均可以恢復修復bug以前dev
分支的狀態:
(1)git stash apply // 恢復工做現場,可是不刪除現場,就是說之後還能夠恢復到該狀態 (2)git stash pop // 恢復工做現場後刪除stash的內容
咱們可使用命令git stash list
來查看有多少現場被保存了,咱們也能夠屢次使用stash
,恢復的時候,經過 list
後查看stash
的值, 而後經過恢復現場的命令來選擇回到具體哪個現場,如:
(1) git stash apply stash@{1} //恢復到 stash@{1} 後不刪除該現場 (2) git stash pop stash@{0} //恢復到 stash@{0} 後刪除該現場
當咱們要添加一個新功能時咱們會新建一個分支來進行添加,等到要合併新功能的分支到主分支時,接到通知說該新功能不須要了,此時若是咱們刪除該新功能分支會提示咱們該新功能分支沒有徹底合併,若是確認要刪除它,執行:git branch -D <分支名稱>
使用這個命令就能夠刪除未合併的分支,其實就是將小寫 d
換成大寫D
咱們通常在開發中都是多人協做開發項目的,當你clone
你的另外一名小夥伴的項目庫到你電腦上後,默認你只能看到該項目的本地master
分支,你若是想要在dev
分支上開發,就必須建立遠程origin
的dev
分支到本地來,使用的命令是:
git checkout -b dev origin/dev
這樣你就能夠繼續在dev
上修改,修改完以後還能夠 push dev
分支到遠程庫,可是若是你的小夥伴也push
了一次到遠程庫,而且此時你和你的小夥伴都對一樣的文件進行了修改,你如今試圖推送該分支到遠程庫,結果出現
推送失敗,由於你的提交與你小夥伴的最新提交之間有衝突。此時根據提示咱們先用git pull
把最新的提交從 origin/dev
抓取下來,而後在本地合併解決衝突後而後提交分支而且推送dev
到遠程庫。有的時候,咱們git pull
也會失敗,緣由是由於沒有指定本地 dev
分支與遠程origin/dev
分支的連接。咱們根據提示,設置連接
設置的命令如提示:
git branch --set-upstream-to=origin/dev
此時就能夠git pull
了,可是在本地合併時還會有衝突,此時咱們經過手動解決衝突後而後推送到遠程庫。
小結:
git remote -v
git checkout -b branch-name origin/branch-name
本地和遠程分支的名稱最好一致爲了更加方便的操做不一樣的版本,使用commit
號(如:fs3k1hgk
)是很是不方便的,若是使用版本號如v 1.2
等標號就能很快的確認一個版本.
標籤:tag
就是一個讓人容易記住的有意義的名字,它跟某一個commit
綁在一塊兒。它能夠相似的理解爲 IP 與域名的關係.
HEAD
,也能夠指定一個commit id
git tag <tagname> 如:git tag v1.0 git tag <tagname> <commit id> 如:git tag v1.0 ew326gd | git tag v 1.0 HEAD@{1}
注: 標籤不是按時間順序列出,而是按字母排序的。能夠用git show <tagname>
查看標籤信息
git tag -d <tagname>
git push origin <tagname>
git push origin --tags
git tag -d <tagname> //先刪除本地標籤 git push origin:refs/tags/<tagname> // 再刪除遠程標籤
因爲git自己是分佈式版本控制系統,能夠同步多個不一樣的遠程庫。例如能夠同時同步到GitHUb和碼雲,可是咱們在使用多個遠程庫時要注意,由於git給遠程庫起的默認名稱是origin
,若是有多個遠程庫,咱們就須要使用不一樣的名稱來標識不一樣的遠程庫。
通常關聯多個遠程庫分爲下面幾個步驟:
origin
,此時你能夠繼續保留這個庫或者先刪除這個庫,而後再關聯而且起一個更加有辨識度的名稱git remote rm origin //刪除已經關聯的名爲origin 的遠程庫
git remote add github git@github.com:dmego/learngit.git
git remote add gitee git@gitee.com:dmocgo/learngit.git
git remote -v
查看遠程庫信息,能夠看到兩個遠程庫:git remote -v gitee git@gitee.com:dmocgo/learngit.git (fetch) gitee git@gitee.com:dmocgo/learngit.git (push) github git@github.com:dmego/learngit.git (fetch) github git@github.com:dmego/learngit.git (push)
git push github master
git push gitee master
這樣一來,咱們的本地庫就能夠同時與多個遠程庫同步
git config --global color.ui true
忽略特殊的文件,其中忽略文件的原則是:
忽略操做系統自動生成的文件,如縮略圖
忽略編譯生成的中間文件,可執行文件,也就是說一個文件時經過其餘文件自動生成的就沒有必要放進版本庫了,例如java編譯產生的.class
文件
忽略帶有敏感信息的配置文件,好比保存了數據庫密碼的配置文件
咱們在Git工做區的根目錄下建立一個特殊的 .gitignore
文件,而後把要忽略的文件名寫進去,Git就會每次在提交的時候自動忽略這些文件,咱們不須要從頭寫一個.gitignore
文件,GitHub已經爲咱們準備了各類配置文件,全部的配置文件均可以在線瀏覽:https://github.com/github/gitignore。
有的時候,你想添加一個文件到git ,可是卻發現添加不了,緣由多是這個文件被忽略了,若是想強制添加可使用命令:
git add -f <filename>
還有的時候發現多是 .gitignore
文件寫錯了,須要找出來到底哪一個規則寫錯了,可使用命令檢查:
git check-ignore -v <filename>
git status
簡化爲git st
:git config --global alias.st status
注意:
--global
參數是全局參數,也就是這些命令在這臺電腦的全部Git 倉庫下均可以使用(是針對當前用戶起做用),若是不加這個參數,就只能對當前倉庫起做用。
每一個倉庫的配置文件都放在.git/config
文件中,其中別名就在 [alias]
後面,要想刪除別名直接把對應的那行刪除就好了
而每一個用戶的配置文件放在用戶主目錄下的一個隱藏文件.gitconfig
中。其中別名就在 [alias]
後面,要想刪除別名直接把對應的那行刪除就好了。
教程地址:廖雪峯GIt教程