1. 程式人生 > >002.Git日常基礎使用

002.Git日常基礎使用

一 獲取git倉庫

1.1 初始化倉庫

  1 [[email protected] ~]# cd /mystudy/
  2 [[email protected] mystudy]# git init
  3 [[email protected] mystudy]# git remote add origin https://gitee.com/imxhy/mystudy
 

1.2 克隆現有倉庫

  1 [[email protected] mystudy]# git clone https://gitee.com/xiyouMc/pornhubbot
2 [[email protected] mystudy]# git clone https://gitee.com/xiyouMc/pornhubbot mystudy #clone專案,同時本地建立mystudy目錄。
 

二 倉庫相關

2.1 檢查狀態

工作目錄下的檔案只有兩種狀態:已跟蹤和未跟蹤。 已跟蹤:指檔案在上一次快照中有對應的記錄,當前狀態可能處於未修改,已修改或已放入暫存區。 未跟蹤:目錄中的除已跟蹤的其他檔案都屬於未跟蹤檔案,既不存在於上次快照的記錄中,也沒有放入暫存區。 未跟蹤——>已跟蹤未修改——>暫存區(修改後暫存)——>git倉庫(提交更新)
01
  1 [[email protected] mystudy]# echo 'My Project' > README
  2 [[email protected] mystudy]# git status
  02 提示:Untracked files:未跟蹤檔案列表,即之前快照(提交)中沒有此檔案,git預設不會自動納入跟蹤範圍。

2.2 跟蹤新檔案

  1 [[email protected] mystudy]# git add README
  2 [[email protected]
mystudy]# git status
  03 提示:Changes to be committed:已暫存狀態的檔案。

2.3 暫存已修改檔案

  1 [[email protected] mystudy]# echo "This is my test file">>README
  2 [[email protected] mystudy]# git status
  04 提示:Changes not staged for commit:跟蹤的檔案內容發生變化,此次變更未放入暫存區。 git add:此命令可以用它開始跟蹤新檔案,或者把已跟蹤的檔案放到暫存區,還能用於合併時把有衝突的檔案標記為已解決狀態等。即“新增內容到下一次提交中”,而不是“將一個檔案新增到專案中”。
  1 [[email protected] mystudy]# git add README		#新增至暫存區
05 提示:若使用git add新增至暫存區之後再次進行修改,檔案會處於暫存區和非暫存區。暫存區儲存上一次add後的版本,非暫存區標記最後一次修改版本,建議進行提交之前add一次。

2.4 狀態簡覽

  1 [[email protected] mystudy]# git status -s
06 提示: ??:新新增暫未跟蹤檔案; A:新新增到暫存區中的檔案; M:已修改過的檔案,若出現在右邊,則表示該檔案被修改了但是還沒放入暫存區,若出現在左邊,則表示該檔案被修改了並放入了暫存區。

2.5 忽略檔案

  1 [[email protected] mystudy]# cat .gitignore
*.[oa] #忽略所有以.o或.a結尾的檔案; *~ #忽略所有以波浪符結尾的檔案; *.log #忽略所有以.log結尾的檔案。 附1:.gitignore 的格式規範如下:
  • 所有空行或者以 # 開頭的行都會被 Git 忽略。
  • 可以使用標準的 glob 模式匹配,即簡化正則表示式。
  • 匹配模式可以以(/)開頭防止遞迴。
  • 匹配模式可以以(/)結尾指定目錄。
  • 要忽略指定模式以外的檔案或目錄,可以在模式前加上驚歎號(!)取反。
附2:簡化正則表示式:
  • 星號(*):匹配零個或多個任意字元;
  • [abc] :匹配任何一個列在方括號中的字元;
  • 問號(?):只匹配一個任意字元;
  • [0-9]:匹配0至9範圍內的任意數字;
  • **: 使用兩個星號(*) 表示匹配任意中間目錄,比如`a/**/z` 可以匹配 a/z, a/b/z 或 `a/b/c/z`等。

2.6 檢視已暫存和未暫存修改

  1 [[email protected] mystudy]# echo "Hello" > README
  2 [[email protected] mystudy]# echo "Hello" > CONTRIBUTING.md
  3 [[email protected] mystudy]# git add README
  4 [[email protected] mystudy]# git status
  解釋:修改以上兩個問題,但對CONTRIBUTING.md檔案未暫存,然後檢視狀態,是已修改未暫存。 07
  1 [[email protected] mystudy]# git diff		#通過git diff檢視具體做了哪些修改。
08 提示:git diff命令比較的是工作目錄中當前檔案和暫存區域快照之間的差異, 也就是修改之後還沒有暫存起來的變化內容。 注意:git diff本身只顯示尚未暫存的改動,而不是自上次提交以來所做的所有改動。

2.7 提交更新

  1 [[email protected] mystudy]# git status
提示:提交之前建議檢查是否所有需要提交的檔案都已處於暫存區,否則提交的時候不會記錄這些還沒暫存起來的變化。
  1 [[email protected] mystudy]# git commit
09 解釋:此種方式會啟動文字編輯器以便輸入本次提交的說明,說明通常位於開頭空行位置。

2.8 跳過暫存區

預設git只會將所有暫存區的檔案進行提交,但可通過git commit -a選項,git會自動把所有已經跟蹤過的檔案暫存起來一併提交,從而跳過 git add 步驟。

2.9 移除檔案

  • 正常git刪除操作:即從git移除同時從工作目錄刪除使用git rm。
  • rm刪除後的git移除:rm檔案後,再使用git rm [檔案]。
  • 放入暫存區之後rm刪除檔案的git移除:git rm -f [檔案]。
  • 從git倉庫刪除但保留在本地目錄:git rm --cached [檔案]。

2.10 移動檔案

  1 [[email protected] mystudy]# git mv README README.md
相當於以下三條命令:
  1 $ mv README README.md
  2 $ git rm README
  3 $ git add README.md
 

三 檢視提交歷史

  1 [[email protected] mystudy]# git log

四 撤銷操作

4.1 重新提交

有時候我們提交完了才發現漏掉了幾個檔案沒有新增,或者提交資訊寫錯了。 此時,可以執行帶有 --amend 選項的提交命令嘗試重新提交。  
  1 [[email protected] mystudy]# git commit -m 'first commit'
  2 [[email protected] mystudy]# echo "This is my test 3 file" > README3.md
  3 [[email protected] mystudy]# git add README3.md
  4 [[email protected] mystudy]# git commit --amend -m 'second commit'
解釋:第一次提交後,發現我們需要再新增一個檔案進行提交,可通過以上方式,會使用第二次提交代替第一次提交結果。

4.2 取消暫存區檔案

  1 [[email protected] mystudy]# echo "This is my test 4 file" > README4.md
  2 [[email protected] mystudy]# echo "This is my test 5 file" > README5.md
  3 [[email protected] mystudy]# git add *
  4 [[email protected] mystudy]# git status
  5 [[email protected] mystudy]# git reset HEAD README5.md	#從暫存區取消特定檔案
  10

4.3 撤銷對檔案的修改

  1 [[email protected] mystudy]# echo "version 1.1" > version.md
  2 [[email protected] mystudy]# git add version.md
  3 [[email protected] mystudy]# git commit -m 'version commit'
  4 [[email protected] mystudy]# echo "version 2.2" > version.md
  5 [[email protected] mystudy]# git status
  12
  1 [[email protected] mystudy]# cat version.md
  2 version 2.2
  3 [[email protected] mystudy]# git checkout -- version.md
  4 [[email protected] mystudy]# git status
  13 解釋:建立一個檔案,提交之後再次修改,然後撤銷此次修改,回滾至上一次提交的版本。

五 遠端倉庫的使用

為了能在任意 Git 專案上協作,管理自己的遠端倉庫非要有必要。遠端倉庫是指託管在因特網或其他網路中的你的專案的版本庫。通常有些倉庫對你只讀,有些則可以讀寫。與他人協作涉及管理遠端倉庫以及根據需要推送或拉取資料。管理遠端倉庫包括瞭解如何新增遠端倉庫、移除無效的遠端倉庫、管理不同的遠端分支並定義它們是否被跟蹤等等。

5.1 檢視遠端倉庫

  1 [[email protected] mystudy]# git remote -v
14

5.2 新增遠端倉庫

  1 [[email protected] mystudy]# mkdir /mystudy2
  2 [[email protected] mystudy]# cd /mystudy2
  3 [[email protected] mystudy2]# git init
  4 [[email protected] mystudy2]# git remote add mystudy2 https://gitee.com/imxhy/mystudy2
  5 [[email protected] mystudy2]# git fetch mystudy2		#使用別名拉取倉庫存在但本地沒有的檔案
  解釋:git remote add <shortname> <url> 新增一個遠端Git倉庫,同時指定一個你可以輕鬆引用的簡寫。

5.3 從倉庫抓取與拉取

git fetch [remote-name]:從倉庫中拉取所有本地沒有的資料。 執行完成後,你將會擁有那個遠端倉庫中所有分支的引用,可以隨時合併或檢視。 注意:必須注意 git fetch 命令會將資料拉取到你的本地倉庫 - 它並不會自動合併或修改你當前的工作。

5.4 推送至遠端倉庫

  1 [[email protected] mystudy2]# git push mystudy2 mystudy2/master
15

5.5 檢視遠端倉庫

  1 [[email protected] mystudy2]# git remote show mystudy2
16 解釋:會列出遠端倉庫的URL與跟蹤分支的資訊。顯示當前正處於master分支,並且如果執行git pull,則會抓取所有的遠端引用,然後將遠端master分支合併到本地master分支。它也會列出拉取到的所有遠端引用。

5.6 遠端倉庫移除與重新命名

  1 [[email protected] mystudy2]# git remote rename mystudy2 study2
  2 [[email protected] mystudy2]# git remote
  3 study2
  提示:修改遠端倉庫名字後會同時修改分支名,如mystudy2/aaa會變味study2/aaa。
  1 [[email protected] mystudy2]# git remote rm study2
  2 [[email protected] mystudy2]# git remote
 

六 git別名

6.1 設定別名

  1 [[email protected] mystudy]# git config --global alias.co checkout
  2 [[email protected] mystudy]# git config --global alias.br branch
  3 [[email protected] mystudy]# git config --global alias.ci commit
  4 [[email protected] mystudy]# git config --global alias.st status
  解釋:如上所示,使用別名後,在執行git commit 時,只需要輸入 git ci。