git 常用指令集

Git是分散式的版本控制系統,從架設、簡易操作、設定,此篇主要是整理基本操作、遠端操作等.

註:Git的範圍太廣了,把這篇當作是初學入門就好了.

注意事項

由project/.git/config可知:(若有更多,亦可由此得知)

origin(remote)是Repository的版本

master(branch)是local端,正在修改的版本

平常沒事不要去動到origin,如果動到,可用gitreset--hard回覆到沒修改的狀態.

Git新增檔案

gitadd.#將資料先暫存到stagingarea,add之後再新增的資料,於此次commit不會含在裡面.

gitaddfilename

gitaddmodify-file#修改過的檔案,也要add.(不然commit要加上-a的參數)

gitadd-u#只加修改過的檔案,新增的檔案不加入.

gitadd-i#進入互動模式

Git刪除檔案

gitrmfilename

Git修改檔名、搬移目錄

gitmvfilenamenew-filename

Gitstatus看目前的狀態

gitstatus#看目前檔案的狀態

GitCommit

gitcommit

gitcommit-m'commitmessage'

gitcommit-a-m'commit-message'#將所有修改過得檔案都commit,但是新增的檔案還是得要先add.

gitcommit-a-v#-v可以看到檔案哪些內容有被更改,-a把所有修改的檔案都commit

Git產生新的branch

gitbranch#列出目前有多少branch

gitbranchnew-branch#產生新的branch(名稱:new-branch),若沒有特別指定,會由目前所在的branch/master直接複製一份.

gitbranchnew-branchmaster#由master產生新的branch(new-branch)

gitbranchnew-branchv1#由tag(v1)產生新的branch(new-branch)

gitbranch-dnew-branch#刪除new-branch

gitbranch-Dnew-branch#強制刪除new-branch

gitcheckout-bnew-branchtest#產生新的branch,並同時切換過去new-branch

#與remoterepository有關

gitbranch-r#列出所有Repositorybranch

gitbranch-a#列出所有branch

Gitcheckout切換branch

gitcheckoutbranch-name#切換到branch-name

gitcheckoutmaster#切換到master

gitcheckout-bnew-branchmaster#從master建立新的new-branch,並同時切換過去new-branch

gitcheckout-bnewbranch#由現在的環境為基礎,建立新的branch

gitcheckout-bnewbranchorigin#於origin的基礎,建立新的branch

gitcheckoutfilename#還原檔案到Repository狀態

gitcheckoutHEAD.#將所有檔案都checkout出來(最後一次commit的版本),注意,若有修改的檔案都會被還原到上一版.(gitcheckout-f亦可)

gitcheckoutxxxx.#將所有檔案都checkout出來(xxxxcommit的版本,xxxx是commit的編號前四碼),注意,若有修改的檔案都會被還原到上一版.

Gitdiff

gitdiffmaster#與Master有哪些資料不同

gitdiff--cached#比較stagingarea跟本來的Repository

gitdifftag1tag2#tag1,與tag2的diff

gitdifftag1:file1tag2:file2#tag1,與tag2的file1,file2的diff

gitdiff#比較目前位置與stagingarea

gitdiff--cached#比較stagingarea與Repository差異

gitdiffHEAD#比較目前位置與Repository差別

gitdiffnew-branch#比較目前位置與branch(new-branch)的差別

gitdiff--stat

GitTag

gittagv1ebff#log是commitebff810c461ad1924fc422fd1d01db23d858773b的內容,設定簡短好記得Tag:v1

gittag中文ebff#tag也可以下中文,任何文字都可以

gittag-d中文#把tag=中文刪掉

Gitlog

gitlog#將所有log秀出

gitlog-p#將所有log和修改過得檔案內容列出

gitlog--stat--summary#查每個版本間的更動檔案和行數

gitlogfilename#這個檔案的所有log

gitlogdirectory#這個目錄的所有log

gitlog-S'foo()'#log裡面有foo()這字串的.

gitlog--no-merges#不要秀出merge的log

gitlog--since="2weeksago"#最後這2週的log

gitlog--pretty=oneline#秀log的方式

gitlog--pretty=short#秀log的方式

gitlog--pretty=format:'%hwas%an,%ar,message:%s'

gitlog--pretty=format:'%h:%s'--graph#會有簡單的文字圖形化,分支等.

gitlog--pretty=format:'%h:%s'--topo-order--graph#依照主分支排序

gitlog--pretty=format:'%h:%s'--date-order--graph#依照時間排序

Gitshow

gitshowebff#查log是commitebff810c461ad1924fc422fd1d01db23d858773b的內容

gitshowv1#查tag:v1的修改內容

gitshowv1:test.txt#查tag:v1的test.txt檔案修改內容

gitshowHEAD#此版本修改的資料

gitshowHEAD^#前一版修改的資料

gitshowHEAD^^#前前一版修改的資料

gitshowHEAD~4#前前前前一版修改的資料

Gitreset還原

gitreset--hardHEAD#還原到最前面

gitreset--hardHEAD~3

gitreset--softHEAD~3

gitresetHEADfilename#從stagingarea狀態回到unstaging或untracked(檔案內容並不會改變)

Gitgrep

gitgrep"te"v1#查v1是否有"te"的字串

gitgrep"te"#查現在版本是否有"te"的字串

Gitstash暫存

gitstash#丟進暫存區

gitstashlist#列出所有暫存區的資料

gitstashpop#取出最新的一筆,並移除.

gitstashapply#取出最新的一筆stash暫存資料.但是stash資料不移除

gitstashclear#把stash都清掉

Gitmerge合併

gitmerge

gitmergemaster

gitmergenew-branch

下述轉載自:ihower的Git版本控制系統(2)開branch分支和操作遠端repo.x

Straightmerge預設的合併模式,會有全部的被合併的branchcommits記錄加上一個merge-commit,看線圖會有兩條Parents線,並保留所有commitlog。

Squashedcommit壓縮成只有一個merge-commit,不會有被合併的log。SVN的merge即是如此。

cherry-pick只合併指定的commit

rebase變更branch的分支點:找到要合併的兩個branch的共同的祖先,然後先只用要被merge的branch來commit一遍,然後再用目前branch再commit上去。這方式僅適合還沒分享給別人的localbranch,因為等於砍掉重練commitlog。

指令操作

gitmerge<branch_name>#合併另一個branch,若沒有conflict衝突會直接commit。若需要解決衝突則會再多一個commit。

gitmerge--squash<branch_name>#將另一個branch的commit合併為一筆,特別適合需要做實驗的fixesbug或newfeature,最後只留結果。合併完不會幫你先commit。

gitcherry-pick321d76f#只合併特定其中一個commit。如果要合併多個,可以加上-n指令就不會先幫你commit,這樣可以多pick幾個要合併的commit,最後再gitcommit即可。

Gitblame

gitblamefilename#關於此檔案的所有commit紀錄

Git還原已被刪除的檔案

gitls-files-d#查看已刪除的檔案

gitls-files-d|xargsgitcheckout--#將已刪除的檔案還原

Git維護

gitgc#整理前和整理後的差異,可由:gitcount-objects看到.

gitfsck--full

Gitrevert資料還原

gitrevertHEAD#回到前一次commit的狀態

gitrevertHEAD^#回到前前一次commit的狀態

gitresetHEADfilename#從stagingarea狀態回到unstaging或untracked(檔案內容並不會改變)

gitcheckoutfilename#從unstaging狀態回到最初Repository的檔案(檔案內容變回修改前)

以下與遠端Repository相關

Gitremote維護遠端檔案

gitremote

gitremoteaddnew-branchhttp://git.example.com.tw/project.git#增加遠端Repository的branch(origin->project)

gitremoteshow#秀出現在有多少Repository

gitremotermnew-branch#刪掉

gitremoteupdate#更新所有Repositorybranch

gitbranch-r#列出所有Repositorybranch

抓取/切換Repository的branch

gitfetchorigin

gitcheckout--track-breps-branchorigin/reps-branch#抓取reps-branch,並將此branch建立於local的reps-branch

刪除Repository的branch

gitpushorigin:heads/reps-branch

相关推荐