Git基本命令

git 是什么?

git是一個免費、開源的分布式版本控制系統,可以快速、高效地處理無論大或小的任意工程。

git 容易學習,體積小、性能快如閃電,以其低成本的本地分支,方便快捷的緩存區域,具有多個工作流的特點超越了諸如Subversion, CVS, Perforce, ClearCase等SCM工具。

充分了解git以及git工作的基本原理,對于高效使用git并提高工作效率十分有幫助。

git 的特點

  • 快照,而非差異(Snapshots, not differents)
  • 強大的分支管理
  • 幾乎所有的操作都是基于本地的(Nearly every opertation is local)
  • 數據的完整性(Git has integrity)
  • git 通常只會添加數據 (Git generally only adds data)
  • 三個狀態(The three states)
  • 分布式
  • 免費開源

以下著重理解兩點:

  • 快照,而非差異(Snapshots, not differents)

    git 與其他工具最大的區別就是它對于數據的思考方式。大部分工具基于一系列文件的變化存儲信息。記錄的是基于每個文件的每一次改動。

    git 將數據看做一系列微型文件的快照(a set of snapshots of a miniature filesystems),你在本地的每一次提交或者暫存,git會將在那一刻的所有文件進行快照記錄,并保存一份對該快照的引用。為了高效起見,如果文件沒有發生改變,git 不會再次存儲文件,只是保存一個指向以前一模一樣的文件的鏈接。git 對待數據的方式更像是對待一個快照流。

用圖片來看一下二者的區別:

每個文件的基本版本的變化
項目隨時間的快照作為數據存儲起來
  • 三個狀態(The three states)

駐留的文件在git看來有三種狀態:commited, modified, staged. 即提交、修改和緩存。這樣就形成了git工程的三個目錄:工作目錄,緩存區,git目錄。如下圖所示:

Git的三個目錄:工作目錄,緩存區,git目錄
  • git目錄是Git用來存放工程的元數據和對象數據庫的,是Git最重要的部分??寺it倉庫時,會拷貝此目錄。
  • 工作目錄是工程的一個單一檢出版本。這些文件從git目錄的壓縮數據庫中拉取出來并放置到你的本地磁盤中。
  • 緩存區是一個通常包含在Git目錄中的文件,保存你下一步要進行提交的信息。它有時被稱為'index'。

git 常用命令

git命令十分豐富,這里簡要地將常用的git命令分為四類:

  • 本地倉庫相關
  • 遠程倉庫相關
  • 版本管理相關
  • 分支管理相關

安裝好git以后,首先要進行一下全局的設置:

$ git config --global user.name "yuqy"
$ git config --global user.email "yuqingyang.sh@superjia.com"

*注:

$ git config -l  //可以查看設置  
$ git config --replace-all //可以替換舊的設置

本地倉庫相關命令

本地倉庫初始化操作:

$ mkdir git-share 
$ cd git-share  
$ git init  
Initialized empty Git repository in /Users/yqy/git-share.git/

本地工作目錄添加至緩存:

$ git add iwjw.js

緩存區提交至本地Git倉庫:

$ git commit -m "add first file"

-m是注釋,用于添加對于此次提交的說明。

以上兩步將文件提交到了git倉庫,若想簡化步驟,可以使用:

$ git commit -ma "modify file"

檢查文件狀態:

$ git status

那么如何撤銷本地倉庫的相關操作呢?

撤銷本地工作目錄的修改:

$ git checkout iwjw.js

撤銷緩存區的修改:

$ git reset HEAD iwjw.js

撤銷git目錄的修改:

$ git revert iwjw.js

遠程倉庫相關命令:

可以在github上創建一個倉庫,例如,這里創建好了的一個倉庫,地址為:http://www.github.com/yuqy/git-share.git

首先,本地倉庫關聯至遠程倉庫:

$ git remote add orgin https://www.github.com/yuqy/git-share.git

本地倉庫推送至遠程倉庫:

$ git push -u origin master

從遠程倉庫克隆到本地:

$ git clone https://www.github.com/yuqy/git-share.git

查看遠程倉庫:

$ git remote -v

刪除遠程倉庫:

$ git remote rm origin

修改遠程倉庫:

$ git remote set-url xxx

從遠程倉庫拉取代碼:

$ git fetch
$ git merge orgin/master

可以用$ git pull簡化以上兩條命令

本地倉庫推送到遠程倉庫:
$ git push origin master

本地倉庫的某分支提交到遠程倉庫的某分支:

$ git push localbranch:remotebranch

版本管理的相關命令:

查看歷史:

$ git log  
$ git log --pretty=format:'%h %add | %s%d[%an] --graph --date=short '

獲得舊版本(版本回退):

$ git checkout 3b7e6fc

這是,3b7e6fc是哈希值前7位。

給版本打標簽:

git tag v1

移除標簽:

$ git tag -d v1

查看標簽:

$ git tag

分支管理相關命令:

查看分支:

$ git branch

查看遠程分支:

$ git branch -r

創建分支:

$ git branch br1

創建并切換分支:

$ git checkout -b  br1

從某個提交處切換分支:

$ git checkout -b  br2 5e6a24e

切換分支:

$ git checkout master

合并分支:

$ git merge master

解決沖突:
在合并分支的時候往往會遇到沖突,打開文件,常??梢钥吹?

<<<<<<< HEAD    
alert(1)
=======  
alert(2)  
>>>>>> master 

其中HEAD與=====之間表示是當前版本的內容,====與master之前表示是合并過來的分支的內容。解決沖突就是在兩個版本中選擇一個版本,刪除另外一個。

刪除分支:

$ git branch -d br1
$ git branch -D br1

-d,若分支沒有被合并,通常會提醒,因此刪除不了,-D是強制刪除,

刪除遠程分支:

$ git branch -d br1之后,git push origin :br1

衍合:

$ git rebase master

衍合與合并的區別:
衍合將重寫提交樹,(可能會影響他人的分支合并)
場合:希望得到精確的提交歷史線時可以使用衍合

有用的git技巧

  • 別名:
$ git config --global alias.co checkout

或者修改.gitconfig文件

  • 比較
$ git diff
  • 修改上一次的提交:
$ git commit --amend -m "add one line"
  • 儲藏未提交的修改:
$ git stash
  • 查看所有的儲藏列表
$ git stash list
  • 將某個儲藏應用到工作目錄
$ git stash apply stash@{0}
  • 將最后一次儲藏應用到工作目錄
$ git stash pop
  • 清空所有儲藏
$ git stash clear
  • cherry-pick:
    從不同的分支中檢出一個單獨的commit , 并把它和你當前的分支合并
    類似于打補丁,例如,修復一個所有分支都有的bug這樣的場合可以適用。
$ git cherry-pick 8ea36d5
  • git blame 查找問題的利器
$ git blame -L 2,+4 iwjw.js

-L: 從指定行開始
+4: 要顯示的行數

  • git reflog 對commit的跟蹤
$ git reflog

新get:

git 未提交,切換分支

git clean -d -fx

x --刪除忽略文件已經對git來說不識別的文件
d --刪除未被添加到git的路徑中的文件
f --強制運行

通過git提交查看提交屬于哪個分支

git branch -r --contains CommitID

git GUI Clients

參考:
git-scm
推薦使用免費的,在windows,mac上都可使用的source tree軟件。

References

[1] www.git-scm.com
[2] git 教程--廖雪峰的官方網站

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容