Git學習之路

Git是目前世界上最早進的分佈式版本控制系統。html

Git同時也是Linus改變世界的第二大創舉。
關於分佈式和集中式的區別,能夠看一下這篇文章集中式vs分佈式git

一.名詞解析

1.工做區

文件所在的文件夾github

2.版本庫

文件夾中含有.git的隱藏文件夾。
此處輸入圖片的描述app

經過add添加的文件被添加到暫存區,commit提交後,把暫存區的全部內容提交到分支上。ssh

二.基本操做

1. 用戶配置

git config --global user.name "hope"
git config --global user.email "12332@qq.com"

配置級別
--local 默認,高優先級 隻影響本倉庫 .git/config
--global 中優先級,影響到全部當前用戶的git倉庫 ~/.gitconfig
--system 低優先級 影響到全系統的git倉庫 /etc/gitconfig分佈式

2. 初始化倉庫

git init
git status //查看倉庫情況

git status對狀態的跟蹤,包括內容狀態:工做目錄、暫存區、提交區
文件狀態:未跟蹤和已跟蹤網站

3. 添加文件到Git倉庫

分兩步spa

第一步,使用命令git add<file>或者git add --all,注意,可反覆屢次使用,添加多個文件;
第二步,使用命令git commit,完成。-m後面輸入的是本次提交的說明.net

4. 版本回退

每次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,而後進行回退。

5. 修改和撤銷

若是想要修改的文件被記錄在版本庫裏,add以後須要commit,否則不會記錄以前完成的修改過程。
若是想撤銷修改的話,

git checkout -- file

若是文件尚未add到暫存區的話,就會與版本庫裏的相同。若是文件在暫存區的話,撤銷修改就回到添加到暫存區後的狀態。讓這個文件回到最近一次git commit或git add時的狀態。

撤銷暫存區的內容
git reset HEAD <file>

將文件內容從上次提交複製到暫存區

撤銷所有改動
git checkout HEAD --<file> //將內容從上次提交複製到工做目錄

6.刪除文件

直接在文件裏面刪除文件或者使用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倉庫之間關聯,須要作一些前期工做。

1. 先有本地庫後有遠程庫

a. 建立SSH Key。
ssh-keygen -t rsa -C "youremail@example.com"
b. 添加id_rsa.pub內容

登錄GitHub,打開「Account settings」,「SSH Keys」,「Add SSH Key」,粘貼id_rsa.pub裏面的內容
這樣你在電腦就能夠推送到github上的倉庫了。

c.在GitHub上建立倉庫
d. 推送內容
git remote add origin git@github.com:github帳戶名/倉庫名稱.git

下一步,把本地庫的全部內容推送到遠程庫上:

git push -u origin master

以後進行推送的時候就能夠不用加上-u,直接使用

git push origin master

2.先有遠程庫,後有本地庫

從一個遠程庫進行clone

git clone git@github.com:GitHub帳戶名/項目名.git

四. 分支管理

1.關於分支的管理

a. 建立分支
git checkout -b dev

等價於

git branch dev
git checkout dev

查看分支

git branch

切換分支

git checkout master

合併分支

git merge dev

刪除分支

git branch -d dev

2. 解決衝突

Git沒法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
git log --graph命令能夠看到分支合併圖。

3. 分支管理策略

用Fast forward模式,刪除分支後,會丟掉分支信息。若是要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,能夠從分支歷史上就能夠看出分支信息。

git merge --no-ff -m "merge with no-ff" dev

4. Bug分支管理

須要儘早完成bug的修理,可是分支上的工做只是工做到一半,這是咱們可使用

$ git stash

保存工做,而後在master分支上建立分支修復。
修完bug後有兩種方法進行修復

git stash apply  //stash內容不刪除
git stash pop //恢復的同時也把stash的內容給刪除了

因爲dev分支上沒有bug修復的代碼,因此能夠切換到dev分支上,而後

git merge master

5. feature分支

有時須要丟棄新的feature,因此使用強行刪除

git branch -D feature-vulcan

6. 多人協做

a. 克隆分支

可使用git remote參看遠程庫的信息

b.推送分支
git push origin dev

約定在dev分支上開發,就必須建立遠程origin的dev分支到本地,建立本地dev分支:

$ git checkout -b dev origin/dev
c. 抓取分支
git pull

若是推送失敗的話,可能緣由是沒有指定本地dev分支與遠程origin/dev分支的連接

git branch --set-upstream branch-name origin/branch-name

五.參考資料

廖雪峯的官方網站Git教程
git diff的用法
Git 分支管理詳解
git官網

相關文章
相關標籤/搜索