git 命令詳解

jopen 9年前發布 | 23K 次閱讀 Git命令 Git 版本控制系統

本文暫時不會涉及到團隊如何使用Git的內容,而是從個人的角度探討如何用好Git。

約定

綠色的5位字符表示提交的ID,文中用<commit>表示,分別指向父節點。分支用橘色顯示,分別指向特定的提交。當前分支由附在其上的標識。 這張圖片里顯示最后5次提交,是最新提交。分支指向此次提交,另一個分支指向祖父提交節點。

git 命令詳解

git cat-file

git cat-file -t <commit>,查看Git對象的類型,主要的git對象包括tree,commit,parent,和blob等。

git cat-file -p <commit>,查看Git對象的內容

git log

git log主要用來顯示分支中提交更改的記錄。當執行git commit以存儲一個快照的時候,文件詳單、提交消息和提交者的信息、此次提交所基于的快照都會被保存。

git log --oneline,可以顯示更加短小的提交ID.

git log --graph,顯示何時出現了分支和合并等信息.

git log --pretty=raw,顯示提交對象的parent屬性.

git config

git config -e

git config -e --global

git config -e --system

Git的三個配置文件分別是版本庫級別的配置文件(/.git/config)、全局配置文件(用戶主目錄下)和系統級配置文件(/etc目錄 下)。這個命令的作用是打開相應的配置文件,并且進行編輯。其中版本庫級別的配置文件的優先級最高,全局配置文件次之,系統級別配置文件最低。Git配置 文件采用的是INI文件格式。

git config <section>.<key>,讀取和更改INI配置文件的內容。

git config <section>.<key> <value>,修改INI配置文件中某個配置的鍵值

在全局空間中添加新的用戶

git config --global user.name "harvey liu"

git config --global user.email harvey_liu@163.com

設置git命令的別名

git config --global alias.ci commit

git config --global alias.co checkout

刪除git全局配置文件中的用戶名

git config --unset --global user.name

git config --unset --global user.email

git grep

git grep可以用來搜索工作區中的文件內容

要查找git倉庫里某個特定版本里的內容, 我們可以像下面一樣在命令行末尾加上標簽名(tag reference),git grep '文字內容' v1.0

git diff

git 命令詳解

git diff,顯示工作區和暫存區的差異

git diff HEAD,顯示工作區和HEAD之間的差異

git diff --cached,顯示暫存區和HEAD之間的差異

git diff id1 id2,顯示兩次提交之間的差異

git status

git status,查看你的代碼在緩存與當前工作目錄的狀態

git status -s,將結果以簡短的形式輸出

git add

git add,在提交你修改的文件之前,你需要把它們添加到暫存區。如果該文件是新創建的,你可以執行將該文件添加到暫存區

git add . ,Git會遞歸地將你執行命令時所在的目錄中的所有文件添加上去,所以如果你將當前的工作目錄作為參數,它就會追蹤那兒的所有文件

git add -u,使用-u參數調用了git add命令,會將本地有改動(包括刪除和修改)的已經追蹤的文件標記到暫存區中。

git add -A,使用-A參數會將添加所有改動的已跟蹤文件和未跟蹤文件。

git add -i,交互式的方式進行添加。

git commit

git commit --amend,修補式提交。

git commit --a,對本地所有變更的文件執行提交操作,包括對本地修改的文件和刪除的文件,但是不包括未被版本庫跟蹤的文件。但是這個命令最好不要使用,這樣會丟掉Git暫存區帶給用戶的最大好處:對提交內容進行控制的能力

git commit --allow-empty,允許執行空白提交

git reset

git 命令詳解

把當前分支指向另一個位置,并且有選擇的變動工作目錄和索引

git reset --hard <commit>,其中commit是可選項,可以使用引用或者提交ID,如果省略則相當于使用了HEAD的指向作為提交ID,完成的操作包括替換引用的指向,替換暫存區,替換工作區

git reset --soft <commit>,其中commit是可選項,可以使用引用或者提交ID,如果省略則相當于使用了HEAD的指向作為提交ID。完成的操作主要是更改引用的指向,不改變暫存區和工作區

git reset,等同于git reset HEAD,用HEAD指向的目錄樹重置暫存區

git reset -- filename,將文件filename的改動撤出暫存區,暫存區其他文件不變

git reset HEAD --filename 等同于git reset -- filename

git branch

git branch,顯示當前所在的分支

git branch <branchname>,創建新的分支branchname

git branch <branchname> <start-point>,基于提交<start-point>創建新分支,新分支的分支名為<branchname>

git branch -d <branchname> ,刪除名稱為branchname的分支,刪除時會檢查所有的刪除分支是否已經合并到其他分支,否則拒絕刪除

git branch -D <branchname>,強制刪除分支<branchname>

git branch -m <oldbranch> <newbranch>,重命名分支

git checkout

git checkout branchname,會改變HEAD頭指針,主要用于切換分支

git checkout -b branchname,用于創建一個新的分支,并且切換到創建的新的分支上

git checkout --filename,用暫存區中的filename文件來覆蓋工作區中的filename文件

git checkout <commit> --filename,用指定提交中的文件覆蓋暫存區和工作區中對應的文件

git checkout -- .或者git checkout .,用暫存區的所有文件直接覆蓋本地文件,取消所有的本地的修改,是一條危險的操作

git clean

刪除本地多余的目錄和文件

git clean -nd,顯示要刪除的內容,但是是預刪除

git clean -fd,強制刪除多余的文件和目錄

git rm

rm命令刪除的文件只是在本地進行了刪除,尚未添加到暫存區,也就是說,直接在工作區刪除,對暫存區和版本庫沒有任何影響。

git rm命令會將刪除動作加入暫存區,這是執行提交動作,就從真正意義上執行了文件刪除。

git mv

git mv,移動文件,git中以git rm和git add兩條命令取而代之。

git archive

git archive,對任意提交對應的目錄樹建立歸檔。

git archive -o latest.zip HEAD,基于最新提交建立歸檔文件latest.zip

git archive -o partial.tar HEAD src doc,只將目錄src和doc建立到歸檔文件partial.tar中

git archive --format=tar --prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz,基于里程碑v1.0建立歸檔,并且為歸檔中的文件添加目錄前綴1.0

git clone

git clone <repository> <directory>,將repository指向的版本庫創建一個克隆到directory目錄中。目錄directory相當于克隆版 本庫的工作區,文件都會檢出,版本庫位于工作區下得.git目錄中。

git clone --bare <repository> <directory.git>

git clone --mirror <repository> <directory.git>

上面的兩種克隆版本都不包含工作區,直接就是版本庫的內容,這樣的版本庫稱為裸版本庫。

git push

git push <remote> [branch],就會將你的 [branch] 分支推送成為 [alias] 遠端上的 [branch] 分支,要推送的遠程版本號的URL地址由remote.<remote>.pushurl給出,如果沒有配置,則使用 remote.<remote>.url配置的URL地址。

git pull

git pull,從遠端的服務器上下載數據,從而實現同步更新。要獲取的遠程版本庫的URL地址由remote.<remote>.url提供。

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!