Git是一個開源的分佈式版本控制系統,用以有效、高速的處理從很小到很是大的項目版本管理linux
有兩種取得 Git 項目倉庫的方法。git
第一種是在現存的目錄下,經過導入全部文件來建立新的 Git 倉庫。github
第二種是從已有的 Git 倉庫克隆出一個新的鏡像倉庫來。編程
一.從當前目錄初始化 Git init安全
初始化後,在當前目錄下會出現一個名爲 .git 的目錄,全部 Git 須要的數據和資源都存放在這個目錄中。app
二.git clone ssh://r10003@192.168.10.124/git/mx28/linux-2.6-imx.gitssh
將遠程倉庫克隆到本地,目錄名爲linux-2.6-imx並在目錄下建立.git目錄。若是但願在克隆的時候,本身定義要新建的項目目錄名稱,分佈式
能夠在上面的命令最後指定:/linux-2.6-imx.git Mylinuxsvn
SSH 爲創建在應用層和傳輸層基礎上的安全協議。工具
在客戶端執行
Ssh 用戶名@192.168.10.124 //使用192.168.10.124某一指定的用戶名和密碼登錄
後面的git/mx28就是目錄了
Git中從遠程的分支獲取最新的版本到本地有這樣2個命令:相反就有一個命令
git fetch:至關因而從遠程獲取最新版本到本地,不會自動merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
以上命令的含義:
首先從遠程的origin的master主分支下載最新的版本到origin/master分支上
而後比較本地的master分支和origin/master分支的差異
最後進行合併
git pull:至關因而從遠程獲取最新版本並merge到本地
git pull origin master
上述命令其實至關於git fetch 和 git merge
在實際使用中,git fetch更安全一些
由於在merge前,咱們能夠查看更新狀況,而後再決定是否合併
git pull origin master是將origin這個版本庫的代碼更新到本地的master主分支
git log 查看提交信息 看你commit的日誌
git log -p 查看歷次的log信息及更改狀況 看到的是跟補丁同樣的修改信息
git log -p -4 查看距如今最近的4次的log信息及更改狀況
git log frameworks/ 查看關於frameworks/目錄修改相關的log信息
git log --stat 查看log顯示文件修改狀況
git log --stat packages/apps/Contacts/ 查看關於packages/apps/Contacts/目錄修改相關的log顯示的文件修改狀況
git與gitk的區別
有時候圖形化工具更容易展現歷史提交的變化,隨 Git 一同發佈的 gitk 就是這樣一種工具。它是用 Tcl/Tk 寫成的,基本上至關於 git log 命令的可視化版本,凡是 git log 能夠用的選項也都能用在 gitk 上。在項目工做目錄中輸入 gitk 命令後。上半個窗口顯示的是歷次提交的分支祖先圖譜,下半個窗口顯示當前點選的提交對應的具體差別。
git status 查看工做目錄和代碼倉庫的改動狀況
git diff 查看工做目錄和本地倉庫的差別或者本地倉庫各個版本的差別
git diff 會使用文件補丁的格式顯示具體添加和刪除的行。
請注意,單單 git diff 不過是顯示尚未暫存起來的改動,而不是此次工做和上次提交之間的差別。因此有時候你一會兒暫存了全部更新過的文件後,運行 git diff 後卻什麼也沒有,就是這個緣由。 能夠cat diff看一下實際的輸出信息 cat: diff: No such file or directory
git diff packages/apps/Contacts/AndoridManifest.xml 查看工做目錄中AndoridManifest.xml和本地倉庫中AndoridManifest.xml的不一樣
git diff b46cae3b9a377bcd9cfc249a5778fce647feb961 dc94bf29aab18168e79d6496a89e47dba7a1d494 查看這兩個版本的不一樣(git diff history_old history_current)
git commit 提交當前修改內容 提交只是提交到本地倉庫
git commit file1 file2 -m "log message" 提交file1,file2到本地倉庫
git commit -a -m "log message" 提交全部在Git索引中的改動 有-a表明不用add了
有時候咱們提交完了才發現漏掉了幾個文件沒有加,或者提交信息寫錯了。想要撤消剛纔的提交操做,可使用 --amend 選項從新提交:
$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend
上面的三條命令最終獲得一個提交,第二個提交命令修正了第一個的提交內容。
git add 增長文件到Git索引
git add file3 file4 將file3,file4加入到Git索引中 git add 僅是暫存不是提交
git rm 從Git索引移除文件
git rm file3 將file3從Git索引中刪除
git branch 對分支的增、刪、查操做
git branch 顯示全部本地分支
git branch new_branch 在當前版本建立一個名爲new_branch的分支
git branch -D new_branch 強制刪除名爲new_branch的分支
git checkout 在不一樣的branch切換和還原文件
git checkout branch1 切換到branch1分支 切換前最好把工做目錄add並提交 不然切換後會報錯或者工做目錄不換還原
git checkout /packages/apps/Contacts/AndroidManifest.xml 會將AndroidManifest.xml文件從上一次提交的版本更新回來,未提交的部分會所有回滾
git remote查看當前配置有哪些遠程倉庫
git remote add pb git://github.com/paulboone/ticgit.git要添加一個新的遠程倉庫,能夠指定一個簡單的名字,以便未來引用
git remote show origin查看某個遠程倉庫的詳細信息
git tag列顯已有的標籤
git tag -a v1.4 -m 'my version 1.4'建立一個含附註類型的標籤 V1.4
git revert 是撤銷某次操做,這次操做以前的commit都會被保留
git reset 是撤銷某次提交,可是這次以後的修改都會被退回到暫存區
git reset 將當前的工做目錄徹底回滾到指定的版本號
git reset [--fixed] 3204f2f0bdfd6ada86c587b8927cdc5a15c586c1 只更新索引,不更新工做目錄,也就是說全部的本地文件都不會更新
打補丁
一.方法一比較通用
Git commit 好比在PATH分支提交後
Git diff master>patch 建立補丁文件
Git checkout master 回到主分支
Git apply patch 經過patch打補丁
二.
Git conmmit 先在一個分支提交
Git format_patch –M master 生成.patch補丁文件
Git checkoutmaster 回到須要打補丁的分支
Git am ***.patch 打補丁 打完補丁至關於完成一次提交
遇到問題 錯誤提示信息
previous rebase directory /home/hailong/Workspace/zhl/.git/rebase-apply still exists but mbox given.
在用git am提交patch時,有時在提交失敗後,繼續提交時會出現/.git/rebase-apply still exists but mbox given錯誤,由於錯誤的提交致使git內部的數據出現了錯誤,所以繼續提交patch就會報錯,1.使用git am --abort命令將git的狀態恢復到以前狀態就能夠繼續提交patch了。2. 直接刪除/home/hailong/Workspace/zhl/.git/rebase-apply這個目錄的。
每次提交patch以前須要執行review-commits命令來檢查patch的編程規範,有錯誤的地方,都會有warning或error的提示,修改以後執行1. git add xxx 2. git commit –amend 再push。
git能夠學習的東西還有不少。git協議,分佈式協做,git項目管理,git技巧,github的使用和實踐,git分支管理的深刻理解和使用,這些估計要之後慢慢學習了。畢竟咱們公司用svn,並且沒有開發大型項目。學到這個程度,基本達到個人目的:能應用git來管理本身的代碼,能用git來鏈接svn進行部門補丁管理,擴展本身的知識面,瞭解開源項目的開發。之後有機會能夠經過開源項目進一步學習。