Git是目前世界上最早進的分佈式版本控制系統。html
Git同時也是Linus
改變世界的第二大創舉。
關於分佈式和集中式的區別,能夠看一下這篇文章集中式vs分佈式git
文件所在的文件夾github
文件夾中含有.git的隱藏文件夾。app
經過add添加的文件被添加到暫存區,commit提交後,把暫存區的全部內容提交到分支上。ssh
git config --global user.name "hope" git config --global user.email "12332@qq.com"
配置級別
--local 默認,高優先級 隻影響本倉庫 .git/config
--global 中優先級,影響到全部當前用戶的git倉庫 ~/.gitconfig
--system 低優先級 影響到全系統的git倉庫 /etc/gitconfig分佈式
git init git status //查看倉庫情況
git status
對狀態的跟蹤,包括內容狀態:工做目錄、暫存區、提交區
文件狀態:未跟蹤和已跟蹤網站
分兩步spa
第一步,使用命令git add<file>或者git add --all,注意,可反覆屢次使用,添加多個文件;
第二步,使用命令git commit,完成。-m後面輸入的是本次提交的說明.net
每次commit做爲一次快照版本控制
git log //能夠查看歷史記錄 git log --pretty=oneline //版本ID一行顯示 git reset --hard HEAD^ //會退到上一個版本 git reset --hard commit_id //退到指定ID版本
上一個版本就是HEAD^
,上上一個版本就是HEAD^^
,往上100能夠寫成HEAD~100
。
有時因爲回退到以前的版本,原來的新版本就沒有顯示了,此時可使用
git reflog
進行查看ID,而後進行回退。
若是想要修改的文件被記錄在版本庫裏,add以後須要commit,否則不會記錄以前完成的修改過程。
若是想撤銷修改的話,
git checkout -- file
若是文件尚未add到暫存區的話,就會與版本庫裏的相同。若是文件在暫存區的話,撤銷修改就回到添加到暫存區後的狀態。讓這個文件回到最近一次git commit或git add時的狀態。
git reset HEAD <file>
將文件內容從上次提交複製到暫存區
git checkout HEAD --<file> //將內容從上次提交複製到工做目錄
直接在文件裏面刪除文件或者使用rm file
進行刪除
a.若是須要從版本庫中刪除該文件
git rm file //從暫存區與工做目錄刪除 git commit -m "remove file"
git rm --cached //僅從暫存區刪除 git rm $(git ls-files --deleted) //刪除全部被跟蹤可是在工做目錄被刪除的文件
b.刪除錯了,恢復
git checkout -- file
這樣作能夠恢復文件到最新版本,可是最近一次提交後的修改將會丟失。
爲使本地的Git倉庫與GitHub倉庫之間關聯,須要作一些前期工做。
ssh-keygen -t rsa -C "youremail@example.com"
登錄GitHub,打開「Account settings」,「SSH Keys」,「Add SSH Key」,粘貼id_rsa.pub
裏面的內容
這樣你在電腦就能夠推送到github上的倉庫了。
git remote add origin git@github.com:github帳戶名/倉庫名稱.git
下一步,把本地庫的全部內容推送到遠程庫上:
git push -u origin master
以後進行推送的時候就能夠不用加上-u,直接使用
git push origin master
從一個遠程庫進行clone
git clone git@github.com:GitHub帳戶名/項目名.git
git checkout -b dev
等價於
git branch dev git checkout dev
查看分支
git branch
切換分支
git checkout master
合併分支
git merge dev
刪除分支
git branch -d dev
Git沒法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
用git log --graph
命令能夠看到分支合併圖。
用Fast forward模式,刪除分支後,會丟掉分支信息。若是要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,能夠從分支歷史上就能夠看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
須要儘早完成bug的修理,可是分支上的工做只是工做到一半,這是咱們可使用
$ git stash
保存工做,而後在master分支上建立分支修復。
修完bug後有兩種方法進行修復
git stash apply //stash內容不刪除 git stash pop //恢復的同時也把stash的內容給刪除了
因爲dev分支上沒有bug修復的代碼,因此能夠切換到dev分支上,而後
git merge master
有時須要丟棄新的feature,因此使用強行刪除
git branch -D feature-vulcan
可使用git remote
參看遠程庫的信息
git push origin dev
約定在dev分支上開發,就必須建立遠程origin的dev分支到本地,建立本地dev分支:
$ git checkout -b dev origin/dev
git pull
若是推送失敗的話,可能緣由是沒有指定本地dev分支與遠程origin/dev分支的連接
git branch --set-upstream branch-name origin/branch-name