初始化:html
$ git init
這樣就會在當前目錄建立版本庫.git
添加文件:github
$ git add FILENAME
刪除文件索引,而且刪除文件:數據庫
$ git rm FILENAME
重命名:安全
$ git mv OLDFILENAME NEWFILENAME
提交更新,所有:分佈式
$ git commit -a
查看日誌.ide
$ git log
查看指定版本日誌.grunt
$ git show xxxxx
切換分支.工具
$ git checkout BRANCHNAME
建立新的分支.fetch
$ git branch BRANCHNAME
就近建立一個分支,轉移全部目前修改到此分支中, 其實就是建立分支和切換分支的合併操做
$ git checkout -b BRANCHNAME
實驗完畢,發現可行提交後,直接返回主分支中進行合併.
$ git commit -a $ git checkout master $ git merge BRANCHNAME
分支合併,切換到須要合併的分支中,而後執行merge就可以合併.
$ git merge TARGETBRANCH
更多時候咱們須要遠程操做.除了直接clone出來一個完整的倉庫,須要追加更新.
$ git fetch git://xxxx.xxxx master:LOCALBRANCH
將遠程倉庫中的分支fetch到本臨時分支後(例子中爲origin:master),若是指定了分支,則會保存到指定分支中去(例子中爲LOCALBRANCH).而後進行代碼審覈,最後再merge到主分支中去.
固然,也有的時候咱們對遠程倉庫中的代碼有絕對信心,或者僅僅只是你一我的在維護,那麼就能夠直接獲取而且合併.
$ git pull git://xxx.xxxx master
Git 是一種分佈式版本控制系統,客戶端並不僅提取最新版本的文件快照,而是把代碼倉庫完整
圖片來源:http://git-scm.com/figures/18333fig0103-tn.png
每次修改以後,Git 並非保存這些修改以後的差別變化,實際上就像一個照相機同樣,將修改後的文件拍下做爲文件快照,記錄在一個微型的文件系統中。每次提交更新時,檢查一遍全部文件的信息
對於任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。已提交表示該文件已經被安全地保存在本地數據庫中了;已修改表示修改了某個文件,但尚未提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中。
Git 管理項目時,文件流轉的三個工做區域:Git 的工做目錄,暫存區域,以及本地倉庫。
圖片來源:http://git-scm.com/figures/18333fig0106-tn.png
工做區:就是電腦中能夠看到的目錄。
版本庫:工做區中有一個隱藏目錄 ".git" ,這個不算作是工做區,而是 Git 的版本庫。
基本的 Git 工做流程以下:
第一步是用 git add
把文件添加進去,實際上就是把文件修改添加到暫存區(對修改後的文件進行快照,而後保存到暫存區域。);
第二步是用 git commit
提交更改,實際上就是把暫存區的全部內容提交到當前分支;
第三步是用 git push
推送更改,將保存在暫存區域的文件快照永久轉儲到 Git 目錄中。
若是是 Git 目錄中保存着的特定版本文件,就屬於已提交狀態;若是做了修改並已放入暫存區域,就屬於已暫存狀態;若是自上次取出後,做了修改但尚未放到暫存區域,就是已修改狀態。
圖片來源:
git簡明教程
分支是用來將特性開發絕緣開來的。在你建立倉庫的時候,master 是「默認的」分支。在其餘分支上進行開發,完成後再將它們合併到主分支上。
從開發主線上分離開來,造成的分支能夠在不影響主線的同時繼續工做。git中的分支,不會建立源代碼目錄的完整備份,它的操做幾乎在瞬間完成,在不一樣分支之間切換也很輕鬆 git checkout brachname
。
圖片來源:http://rogerdudler.github.io/git-guide/img/branches.png git簡明教程
建立一個叫作「feature_x」的分支,並切換過去:
$ git checkout -b feature_x
切換回主分支:
$ git checkout master
再把新建的分支刪掉:
$ git branch -d feature_x
除非你將分支推送到遠端倉庫,否則該分支就是 不爲他人所見的:
$ git push origin <branch>
在項目中有不少文件不須要提交,好比IDE生成的項目文件,自動化工具 grunt等。在使用 git status
時,這些文件會列舉在 Untracked files 中,有時候爲了方便而使用 git add -A
命令的時候,會將這些沒有被跟蹤的文件添加到索引。
若是一個不當心將某個不須要提交的修改添加到了暫存區(git add *),即:staged。若是這時進行 commit 操做,這個不想提交的修改也會一同提交到本地倉庫的 HEAD 中,固然只有 push 以後修改纔會提交到遠端的倉庫。在 commit 以前,使用
$ git rm --cached filename
即可以把它從暫存區中刪除,保留源文件。
這條命令只是在暫存區中將文件快照刪除而已,並不會將源文件從項目中刪除。若是想連同源文件一塊兒刪除可使用這條命令
$ git rm filename
使用 git diff
查看文件被修改的具體內容:
$ git diff filename
也能夠用來比較項目中任意兩個版本的差別,好比比較兩個分支之間的差別:
$ git diff brach1..brach2
你可能還會看到下面這條看起來很是類似的命令:
$ git diff brach1...brach2
不一樣之處在於:兩個分支名之間的點的個數,後面這條也就是三個"."的命令將顯示出 brach1 和 brach2 共有父分支和 brach2 之間的差別。
你一般用git diff來找你當前工做目錄和上次提交與本地索引間的差別。
$ git diff
上面的命令會顯示在當前的工做目錄裏的,沒有 modified (添加到索引中),且在下次提交時 不會被提交的修改。若是你要看在下次提交時要提交的內容(staged,添加到索引中),你能夠運行:
$ git diff --cached
上面的命令會顯示你當前的索引和上次提交間的差別;這些內容在不帶"-a"參數運行 "git commit"命令時就會被提交。
$ git diff HEAD
上面這條命令會顯示你工做目錄與上次提交時之間的全部差異,這條命令所顯示的 內容都會在執行"git commit -a"命令時被提交。