git學習心得總結

黑小米發表於2015-04-23

    Git是一個開源的分散式版本控制系統,用以有效、高速的處理從很小到非常大的專案版本管理

有兩種取得 Git 專案倉庫的方法。

第一種是在現存的目錄下,通過匯入所有檔案來建立新的 Git 倉庫。

第二種是從已有的 Git 倉庫克隆出一個新的映象倉庫來。

一.從當前目錄初始化 Git init

初始化後,在當前目錄下會出現一個名為 .git 的目錄,所有 Git 需要的資料和資源都存放在這個目錄中。

二.git clone ssh://r10003@192.168.10.124/git/mx28/linux-2.6-imx.git

將遠端倉庫克隆到本地,目錄名為linux-2.6-imx並在目錄下建立.git目錄。如果希望在克隆的時候,自己定義要新建的專案目錄名稱,

可以在上面的命令最後指定:/linux-2.6-imx.git  Mylinux

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地址:https://github.com/liuyunandyi/Text