git 使用筆記(一)

通常處理

初始化: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 記錄的方式

Git 是一種分佈式版本控制系統,客戶端並不僅提取最新版本的文件快照,而是把代碼倉庫完整

image

圖片來源:http://git-scm.com/figures/18333fig0103-tn.png

每次修改以後,Git 並非保存這些修改以後的差別變化,實際上就像一個照相機同樣,將修改後的文件拍下做爲文件快照,記錄在一個微型的文件系統中。每次提交更新時,檢查一遍全部文件的信息

對於任何一個文件,在 Git 內都只有三種狀態:已提交(committed),已修改(modified)和已暫存(staged)。已提交表示該文件已經被安全地保存在本地數據庫中了;已修改表示修改了某個文件,但尚未提交保存;已暫存表示把已修改的文件放在下次提交時要保存的清單中。

Git 管理項目時,文件流轉的三個工做區域:Git 的工做目錄暫存區域,以及本地倉庫

image

圖片來源:http://git-scm.com/figures/18333fig0106-tn.png

工做區:就是電腦中能夠看到的目錄。
版本庫:工做區中有一個隱藏目錄 ".git" ,這個不算作是工做區,而是 Git 的版本庫。

基本的 Git 工做流程以下:

第一步是用 git add 把文件添加進去,實際上就是把文件修改添加到暫存區(對修改後的文件進行快照,而後保存到暫存區域。);
第二步是用 git commit 提交更改,實際上就是把暫存區的全部內容提交到當前分支;
第三步是用 git push 推送更改,將保存在暫存區域的文件快照永久轉儲到 Git 目錄中。

若是是 Git 目錄中保存着的特定版本文件,就屬於已提交狀態;若是做了修改並已放入暫存區域,就屬於已暫存狀態;若是自上次取出後,做了修改但尚未放到暫存區域,就是已修改狀態

圖片來源:image
git簡明教程

分支

分支是用來將特性開發絕緣開來的。在你建立倉庫的時候,master 是「默認的」分支。在其餘分支上進行開發,完成後再將它們合併到主分支上。

從開發主線上分離開來,造成的分支能夠在不影響主線的同時繼續工做。git中的分支,不會建立源代碼目錄的完整備份,它的操做幾乎在瞬間完成,在不一樣分支之間切換也很輕鬆 git checkout brachname

image
圖片來源: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 查看文件被修改的具體內容:

$ 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"命令時被提交。

相關文章
相關標籤/搜索