git基礎知識

  • 2019 年 10 月 5 日
  • 筆記

本文沒啥難度,基本上是我照著廖雪峰的部落格敲的程式碼,權當做篇學習筆記。

git基礎知識

git diff example.txt

git add example.txt

git commit -m 'addby XXXX'

git status

git log[–pretty=online]

windows上安裝git客戶端,到官網下載即可。

安裝完成後,在開始–> GitBash ,輸入下面的內容:

git config –global user.name'lirl'

git config –global user.email'[email protected]'

mkdir testgit

cd testgit/

git init

Initialized empty Gitrepository in D:/testgit/.git/

編輯一個readme.txt,放到D:/testgit/目錄下

git add readme.txt

git commit -m 'add one file'

如下圖:

然後,隨便修改下這個readme.txt,

然後再次執行git status

上圖最後一行的提示告訴我們,readme.txt被修改過了,但還沒有準備提交的修改。

執行git diff readme.txt

上圖的綠色的就是現在的文件內容。

知道哪裡修改後,我們心裡有數後,就可以提交了。

git add readme.txt

git commit -m 'third'

git status

上圖的git告訴我們,當前沒有需要提交的修改,而且工作目錄是乾淨的。

然後我們執行git log 看下修改的歷史記錄。

git log命令顯示從最近到最遠的提交日誌,我們可以看到3次提交,最近的一次是third,上一次是add distributed,最早的一次是wrote a readme file。

如果覺得輸出介面太雜亂,可以加上–pretty=oneline參數,如下圖:

前半截的十六進位字元串是commit id,後面的是commit時候寫的注釋。

然後,我們再演示一下回滾操作,

首先,Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交3628164…882e1e0(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。

如下表示回到上一版本:

git reset –hard HEAD^

回滾完成後,可以直接執行cat命令查看readme.txt的文件內容,如下圖,文件內容已經回到上一版本了:

git log 再次看下有哪些版本

最新的那個版本'third' 已經看不到了!想再回去已經回不去了,腫么辦?

辦法其實還是有的,只要上面的命令行窗口還沒有被關掉,你就可以順著往上找啊找啊,找到那個commit id是dcb953c4e8…,於是就可以指定回到未來的某個版本。

如下執行:

git reset –hard dcb953c4e8c  # 版本號沒必要寫全,前幾位就可以了,Git會自動去找

git log 再次查看如下圖,發現剛才的哪個版本已經回來了:

cat readme.txt 可以發現文件內容已經恢復了。

git reflog   # 可以查看所有分支的所有操作記錄。包括(包括commit和reset的操作),包括已經被刪除的commit記錄。【常用於重返未來】

可以找到以前commit的記錄,就可以回去了。

git reset –hard 760aa48  會退到這個版本

cat readme.txt

linux上安裝git客戶端(本地模式)

yum install git -y

其他操作和winrdows上的一樣。

首先添加個git用戶名和郵箱,多用戶的話,建議下面方式

gitconfig –localuser.name 'lirl'

gitconfig –localuser.email '[email protected]'

假如,原有一個文件提交過的readme.txt。後來做了些修改,並新添加一個issue的文件。

然後執行git status,如下圖:

git add readme.txt

git add issue

git status

git commit -m 'v4'  提交

git add命令實際上就是把要提交的所有修改放到暫存區(Stage),然後,執行git commit就可以一次性把暫存區的所有修改提交到分支。

git status

git的工作流程如下:

管理修改

第一次修改 -> git add -> 第二次修改 -> git commit

你看,我們前面講了,Git管理的是修改,當你用git add命令後,在工作區的第一次修改被放入暫存區,準備提交,但是,在工作區的第二次修改並沒有放入暫存區,所以,git commit只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。

撤銷修改

假如文件錯誤加了一行"Fuck stupid boss"則恢復的方法如下:

git checkout — xx.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這裡有兩種情況:

一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。

總之,就是讓這個文件回到最近一次git commitgit add時的狀態。

如果文件還沒有git add xx.txt ,則checkout操作能回到修改前的版本(回到git commit版本)

如果git add xx.txt已經執行過來,則即便checkout也只能回到添加到暫存區的版本(回到git add版本)。回到老版本需要如下操作:

echo 'stupid boss' >> issue  模擬文件被錯誤的修改了

git add issue

git reset HEAD issue

git status

git checkout — issue

cat issue

git status

cat issue

小結

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file_name,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

刪除文件

git add passwd

git commit -m 'add a passwd'

git status

rm -f passwd  模擬刪除操作

git status

可以看到git發現passwd這個文件被刪除了。同時給出了提示可以執行git rm 或者git checkout

假如我們確實是要刪除,則執行下述操作:

git rm passwd

git status

git commit -m 'rm passwd'

git status

假如我們要恢復文件,則執行下述操作:

git checkout — passwd 即可完成文件的恢復

git checkout其實是用版本庫里的版本替換了工作區的版本,無論工作區是修改還是刪除,都可以「一鍵還原」。