程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> git原理淺析及命令介紹

git原理淺析及命令介紹

編輯:C++入門知識

git原理淺析及命令介紹


狀態描述

請記住,工作目錄下面的所有文件都不外乎這兩種狀態:已跟蹤或未跟蹤。已跟蹤的文件是指本來就被納入版本控制管理的文件,在上次快照中有它們的記錄,工作一段時間後,它們的狀態可能是未更新,已修改或者已放入暫存區。而所有其他文件都屬於未跟蹤文件。它們既沒有上次更新時的快照,也不在當前的暫存區域。初次克隆某個倉庫時,工作目錄中的所有文件都屬於已跟蹤文件,且狀態為未修改。


在編輯過某些文件之後,Git 將這些文件標為已修改。我們逐步把這些修改過的文件放到暫存區域,直到最後一次性提交所有這些暫存起來的文件,如此重復。


如果此時新添加一個文件,那麼它並不在git監管之下,屬於未追蹤的。使用add可以將文件納入到暫存之下。這時候使用git commit會將暫存之下的修改提交,這個時候即使有修改,但是沒有git add過,那麼commit之後,git也不會存在它的快照。所以,要想將文件修改添加到本地倉庫中,需要先add,然後再commit。當然,這樣有點繁瑣,可以直接使用git commit -a命令將工作目錄中的修改保存到本地倉庫中。

一般我們總會有些文件無需納入 Git 的管理,也不希望它們總出現在未跟蹤文件列表。通常都是些自動生成的文件,比如日志文件,或者編譯過程中創建的臨時文件等。我們可以創建一個名為 .gitignore 的文件,列出要忽略的文件模式。


要查看尚未暫存的文件更新了哪些部分,不加參數直接輸入 git diff。此命令比較的是工作目錄中當前文件和暫存區域快照之間的差異,也就是修改之後還沒有暫存起來的變化內容。若要看已經暫存起來的文件和上次提交時的快照之間的差異,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本還允許使用 git diff --staged,效果是相同的,但更好記些。)

請注意,單單 git diff 不過是顯示還沒有暫存起來的改動,而不是這次工作和上次提交之間的差異。所以有時候你一下子暫存了所有更新過的文件後,運行 git diff 後卻什麼也沒有,就是這個原因。

文件提交

git commit -m "Story 182: Fix benchmarks for speed"
可以提交暫存的修改。

git commit -a -m 'added new benchmarks'
上面的命令加了a參數,可以將工作目錄中的修改直接提交,等同於跳過了add過程。

移除文件

要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),然後提交。可以用 git rm 命令完成此項工作,並連帶從工作目錄中刪除指定的文件,這樣以後就不會出現在未跟蹤文件清單中了。

如果只是簡單地從工作目錄中手工刪除文件,運行 git status 時就會在 “Changes not staged for commit” 部分(也就是未暫存清單)看到。

然後再運行 git rm 記錄此次移除文件的操作 git rm filename

如果刪除之前修改過並且已經放到暫存區域的話,則必須要用強制刪除選項 -f(譯注:即 force 的首字母),以防誤刪除文件後丟失修改的內容。

另外一種情況是,我們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然希望保留在當前工作目錄中。換句話說,僅是從跟蹤清單中刪除。比如一些大型日志文件或者一堆 .a 編譯文件,不小心納入倉庫後,要移除跟蹤但不刪除文件,以便稍後在 .gitignore 文件中補上,用 --cached 選項即可

git rm --cached readme.txt
移動文件

要在 Git 中對文件改名,可以這麼做:

git mv file_from file_to
其實,運行 git mv 就相當於運行了下面三條命令:

mv README.txt README
git rm README.txt
git add README

查看提交歷史

git log
git log 有許多選項可以幫助你搜尋感興趣的提交,接下來我們介紹些最常用的。

git log -p -2
我們常用 -p 選項展開顯示每次提交的內容差異,用 -2 則僅顯示最近的兩次更新.

某些時候,單詞層面的對比,比行層面的對比,更加容易觀察。Git 提供了 --word-diff 選項。我們可以將其添加到 git log -p 命令的後面,從而獲取單詞層面上的對比。在程序代碼中進行單詞層面的對比常常是沒什麼用的。不過當你需要在書籍、論文這種很大的文本文件上進行對比的時候,這個功能就顯出用武之地了。

新增加的單詞被 {+ +} 括起來,被刪除的單詞被 [- -] 括起來。在進行單詞層面的對比的時候,你可能希望上下文( context )行數從默認的 3 行,減為 1 行,那麼可以使用 -U1 選項。

還有個常用的 --pretty 選項,可以指定使用完全不同於默認格式的方式展示提交歷史。比如用 oneline 將每個提交放在一行顯示,這在提交數很大時非常有用。


以上只是簡單介紹了一些 git log 命令支持的選項。表 2-2 還列出了一些其他常用的選項及其釋義。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved