git學習心得總結

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進行部門補丁管理,擴展本身的知識面,瞭解開源項目的開發。之後有機會能夠經過開源項目進一步學習。

相關文章
相關標籤/搜索