1. 程式人生 > 其它 >git使用(1)

git使用(1)

目錄

git使用

系統:Windows

安裝:建議參考一篇更詳細的教程:Git 詳細安裝教程(詳解 Git 安裝過程的每一個步驟)_mukes的部落格-CSDN部落格_git安裝

主要參考:Git - Book (git-scm.com)

,官方文件。這裡主要是根據官方文件一步步實現。如果需要更加詳細的資訊,建議去官網檢視更詳細的資訊。如果官網看起來有點難懂,可以檢視這篇blog,這裡是同步的,並且會有一些簡單的解釋。好了,我們開始吧。

1.初次執行 git 前的配置

講解部分(可以跳過,直接進入操作部分):

在配置之前,需要先了解一下三個級別的配置檔案:

  • /etc/gitconfig,所有使用者及倉庫的通用配置,可以在你自己 git 的安裝路徑裡面找到。congif 代表配置。

  • ~/.gitconfig 或者 ~/.config/git/config,一般在C:\Users\user_name 裡面可以找到。user_name 代表 Windows 系統下你自己的使用者名稱。~

    一般代表使用者目錄。而在 Windows 裡的使用者目錄一般在 C 盤。那很顯然這裡的配置只對當前的使用者有用。

  • 當前倉庫下的 config ,配置只針對該倉庫。

我們選擇在 Git Bash 裡面操作,跟 windows 的 cmd 一樣。配置/編輯的語法示例

git config --global user.name "ZhangSan"
  • --global 用來配置 ~/.gitconfig 或者 ~/.config/git/config,可以替換成 --system 配置/etc/gitconfig--local 配置當前倉庫下的 config 。一定要清楚你想讓配置生效的範圍;
  • user.name
    可用其他任意變數名代替,後面跟配置的值是多少,字串要加引號
  • 每一個級別會覆蓋上一級別的配置,所以 .git/config 的配置變數會覆蓋 /etc/gitconfig 中的配置變數。
  • 如果使用了 --global 選項,那麼該命令只需要執行一次,因為之後無論你在該系統上做任何事情, Git 都會使用那些資訊

如果我們要檢視配置:

$ git config --list		# 檢視所有配置
$ git config user.name		# 檢視指定的配置
$ git config --show--origin	# 可以查詢 Git 中該變數的 原始 值,它會告訴你哪一個配置檔案最後設定了該值

你可能會看到重複的變數名,因為 Git 會從不同的檔案中讀取同一個配置(例如:/etc/gitconfig~/.gitconfig)。 這種情況下,Git 會使用它找到的每一個變數的最後一個配置。

操作部分

配置自己的使用者名稱和郵箱在~/.gitconfig 下,這是你安裝後第一個要做的事。示例如下

$ git config --gloabl user.name "ZhangSan"
$ git config --global user.email [email protected]

因為我也是第一次配置,不知道會有什麼影響,這裡我選擇了輸入 GitHub 的賬戶和郵箱。在官方部分,可能還會指出讓你配置編輯器,這裡你可以檢視一下,是不是已經配置好了(因為在安裝部分已經選過了)

$ git config core.editor

2.如何獲取幫助

獲得詳細的幫助, 表示要查詢的物件

$ git help <verb>
$ git <verb> --help
$ man git-<verb>

獲得簡單的幫助

$ git <verb> -h

3.將尚未進行版本控制的本地目錄轉換為 Git 倉庫

先進入你的專案目錄,注意和 cmd 不同,用 / 而不是 \ ,並且選擇進入哪個盤時直接 /c/ 。這裡是以 c 盤為例的,your_path 代表你的專案在對應盤下的路徑。

$ cd /c/your_path

之後執行如下。該命令將建立一個名為 .git 的子目錄,這個子目錄含有你初始化的 Git 倉庫中所有的必須檔案,這些檔案是 Git 倉庫的骨幹。

$ git init

新增指定檔案進行跟蹤(指將檔案納入版本控制)。比如,我們需要跟蹤 helloworld.py 檔案,就如下

$ git add <file/path>
$ git add helloworld.py			# 示例

在新增時,可能會出現一個警告

warning: LF will be replaced by CRLF in timely_test.ipynb.
The file will have its original line endings in your working directory
警告:在 timely_test.ipynb 的 LR 將被替換成 CRLR。你的工作目錄裡的檔案將還是它原始的換行。

這裡只是警告,建議忽略就好。LF 和 CRLF 分時是 Linux/unix 和Windows系統上的換行符,為了方便跨平臺的工作,會自動轉換。會有一個引數 core.autocrlf 來設定,預設是 True。

之後執行 git commit,我這裡是添加了三個檔案

$ git commit -m 'initial project version'

4.記錄每次更新到倉庫

4.1.檢查檔案當前狀態

在工作目錄下的檔案有兩種狀態已跟蹤未跟蹤(Untracked)。對於已跟蹤的檔案,可能有三種狀態:未修改(Unmodified)、已修改(Modified)和已放入快取區(Staged:changes to be commit)。這裡特意註明了單詞,是因為我們在檢查檔案狀態時會看到相應的列表。檢查方法如下:

$ git status

上面是查詢的結果,希望你可以去嘗試讀懂。第一句 on branch master 這個是說當前的分支是master,在安裝時應該有印象,是說因為什麼黑人事件改了。第二句話時是在說我未跟蹤的檔案 untracked files 有哪些並且給出來了。括號裡告訴我怎麼去跟蹤。又說 nothing to commit,因為我現在還沒對檔案做任何修改,沒有暫存的檔案。最後又說了我還有未跟蹤的檔案。在官方文件還有一句是關於遠端部署的,這裡沒有伺服器只是在本地,所以沒有。

如果你查詢出來的結果跟我不一樣,希望你也試著去讀懂,這個很重要!在我把所有檔案跟蹤後,查詢的結果如下:(tree 這裡和 branch 對應)

4.2.跟蹤新檔案

在配置部分已經嘗試過了,這裡另外說明一下,如果新增目錄來跟蹤,則會遞迴的跟蹤該目錄下的所有檔案。

4.3.暫存已修改檔案

我去修改了我的 readme.md 檔案,再去檢視狀態有 changes not staged for commit ,即已跟蹤的檔案發生了變化,但是沒有放到暫存區。

git add 將它放到暫存區,之後再檢視狀態:

注意: git add 這時的功能可以理解為快照,它只記錄你在執行 git add 時的檔案內容,如果你希望暫存新的修改,就要再執行一次 git add

4.4.狀態簡覽

$ git status -s	# 或者
$ git status --short

這裡會用一些狀態標記:A (add)表示新新增到暫存區,M (modefied)表示修改過,? 表示未跟蹤的檔案。狀態列由兩個狀態標記的位置,前面的表示暫存區,後面的表示工作區。

$ git status -s
 M README			# 已修改尚未暫存
MM Rakefile			# 已修改,暫存後又做了修改
A  lib/git.rb			# 新新增到暫存區
M  lib/simplegit.rb		# 已修改且已暫存
?? LICENSE.txt			# 新新增未跟蹤

4.5.忽略檔案

可能有一些臨時的檔案,不用納入 git,也不想看到出現在未跟蹤列表。對於這種情況,可以建立一個名為 .gitignore 的檔案,列出要忽略檔案的格式。類似正則匹配,這裡先不詳細列出。你可以在這裡看到更加詳細的說明:https://github.com/github/gitignore

4.6.檢視修改的內容

git diff 檢視尚未暫存的檔案更新的部分:此時比較的工作目錄的當前檔案與暫存區快照之間的差異。

$ git diff

git diff --staged 檢視已暫存將要新增到下次提交的內容:此時比較已暫存檔案與最後一次提交的檔案的差異。

$ git diff --cached		# 或者
$ git diff --staged

這裡嘗試了已暫存和上次提交的差異,@@ -4,3 +4,5@@ 後面的白色內容是原有的內容(上次提交的內容),下面綠色部分是更新的內容(已暫存的內容),我只是加了 “update!!!” 這段話。

圖形化工具也可以比較檔案差異。

4.6.提交更新

好了,到這裡終於要提交更新 commit 了。用下面命令會把已經暫存的檔案提交,注意,只有已暫存的,如果你在工作區修改了,但是沒有暫時,不會對這些修改生效。

$ git commit

提交後會執行之前設定的編輯器,顯示預設的提交資訊,如圖下圖註釋部分。註釋上面有一個空行,需要你自己對此次提交的內容進行描述,然後儲存關閉即可。

4.7.跳過暫存區

會提交所有修改過的檔案,這樣就可以跳過 git add 步驟,但不可控,可能會提交不需要的檔案。

$ git commit -a

用一張圖來總結一下目前為止的一些命令吧:

4.8.移除檔案

從跟蹤檔案的清單裡移除,然後提交。如果你只是從工作區自己刪除檔案,但是在快照裡還是有這個檔案的。此時執行 git status 會出現 changes not staged for commit

git rm <file> 除了會不再跟蹤外,還會從工作目錄中刪除指定的檔案

git rm -f <file> 強制(force)刪除,可以刪除已經放到暫存區的檔案,這樣的資料不能被 git 恢復。

git rm --cached <file> 只是不再跟蹤,從 git 倉庫中刪除,但是檔案仍然被保留。

$ git rm helloworld.py			# 不再跟蹤且刪除
$ git rm --cached helloworld.py		# 不再跟蹤
$ git rm -f helloworld.py		# 強制刪除,包括暫存區,不可恢復

4.8.重新命名/移動檔案

如果你要重新命名檔案可以這樣做:

$ git mv pre_name new_name		# 相當於執行了下面三條命令
$ mv pre_name new_name
$ git rm pre_name
$ git add new_name

如果說你用其他方式重新命名的檔案,在提交前 git rm 刪除舊檔名,再 git add 新增新檔名。