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 commit
或git 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其實是用版本庫里的版本替換了工作區的版本,無論工作區是修改還是刪除,都可以「一鍵還原」。