
Git, 作為一款先進的版本控制工具,已經越來越多被大家才采用。但是由于其學習成本不小,阻攔的不少人,這裡推薦廖學峰老師的Git入門教程部落格
本部落格是對廖雪峰老師部落格中的Git指令的簡版概述,便于日常使用查詢
一、Git 入門
1.1 Git 安裝
從官網下載下傳安裝Git,然後執行下述指令看是否輸出版本資訊,驗證Git是否安裝成功,
git --version
1.2 Git 配置
配置使用者資訊, 分别執行下述指令,設定您的全局使用者名和郵箱資訊
git config --global user.name "Aaron Zhu"
git config --global user.email "[email protected]"
1.3 基本指令
- 檢視目前目錄 Git 版本庫狀态
git status
- 檢視各版本的 commit message 、 commit id
git log
- 檢視操作Git 的指令曆史記錄. 版本回退後, git log指令顯示的是目前版本之前的版本資訊和commit id,無法檢視目前版本之後版本的commit message、commit id。故可以使用如下指令,檢視之後版本的commit id
git reflog
- 比較工作區中檔案的修改變化
git diff a.java // 比較 a.java 檔案的改動
二、版本庫基本操作
2.1 建立版本庫
在項目檔案夾(無須為空檔案夾)下,執行下述指令建立版本庫,執行成功後會在該目錄下建立一個.git的隐形檔案夾
git init // 建立 Git 版本庫
2.2 添加新檔案、檔案修改
使用指令git add 将新檔案、檔案修改 添加到暫存區Stage, 注意,可反複多次使用,添加多個檔案、修改
git add main.c // 添加 目前目錄下的 main.c 檔案
git add folder1/ // 添加 目前目錄下的 floder目錄中的所有檔案(包含子目錄檔案)
git add * // 添加 目前目錄下的 所有檔案 (包含子目錄檔案)
2.3 檔案删除
删除檔案操作,對于Git而言,本質上也是一種檔案修改。是以在磁盤删除檔案後,可以使用git add指令添加删除檔案的修改到 Stage,同時Git也提供了下述指令用于添加 删除操作的檔案修改
git rm text.c // 添加 text.c 檔案 删除操作
2.4 送出
對于 Stage 中的新檔案、檔案修改,使用指令git commit -m ,完成送出. Note: 版本的備注資訊 message一般不建議省略,否則後期很難追溯
git commit -m "Frist Commit"
三、檔案修改的撤銷
對于某些 檔案修改,我們可能并不想,甚至不能送出上去,那麼該如何撤銷呢?
檔案修改的撤銷,有兩種場景: -
工作區的檔案修改,即,欲撤銷的檔案修改未 add到 暫存區Stage中 -
暫存區的檔案修改,即,欲撤銷的檔案修改已經被 add到 暫存區Stage中
3.1 工作區中檔案修改的撤銷
工作區中檔案修改的撤銷 ,即,
此修改發生在工作區中,但是未被添加到暫存區Stage中對于工作區的
未添加的檔案修改, 可以使用下述指令進行撤銷。其撤銷結果有 2 種情況:
- 如果該
未添加的檔案修改是在 git add 後修改的,即之前修改了若幹次加入Stage後 ,然後又發生了修改,則撤銷後,恢複為Stage中的版本 - 如果該
未添加的檔案修改過程中,從未添加到Stage中,則恢複為版本庫中的版本
即:該檔案的撤銷結果,為最近一次 git add 或 git commit 的檔案狀态。即,
該狀态之後發生了任何未添加的修改都将被撤銷git checkout -- filename.c // 丢棄 filename.c 檔案 在 工作區 的修改
Note: 該用法中(工作區中檔案修改的撤銷),指令中的
--不可省略,否則意為 切換分支
3.2 暫存區中檔案修改的撤銷
暫存區中檔案修改的撤銷, 即,
檔案修改,被意外的add到了暫存區使用下述指令,将暫存區的檔案修改,重新放回工作區,同時暫存區清空。執行後可以看到,檔案狀态為被修改,且未被添加到暫存區。此時,工作區中的檔案修改,你可以繼續編輯、添加、送出,也可以繼續撤銷,對于工作區中檔案修改的撤銷,請參考上文
git reset HEAD main.js // 撤銷 暫存區中 main.js 檔案件修改,重新放回工作區,清空暫存區
四、版本復原
4.1 回退到之前
在Git中,用
HEAD表示目前版本,也就是最新的送出版本。上一個版本就是
HEAD^,上上一個版本就是
HEAD^^,以此類推……當然往上100個版本寫100個^比較容易數不過來,是以寫成HEAD~100
git reset 指令 回退到之前的版本
git reset --hard HEAD^ // 回退到上一個版本
git reset --hard HEAD^^ // 回退到上一個版本
git reset --hard xxxx // xxxx 為之前版本的commit id的前幾位
4.2 回退到之後
代碼回退到之前的版本後,如果想繼續回退到之後的版本,則無法使用上文HEAD辨別回退到未來的版本,但可以使用commit id的方法進行回退
git reset --hard commitId // 回退到之後的 commit id 版本
git reset --hard 1c23bc // 回退到 commit id 為 1c23bc ... xxxx 的版本;commit id 數字串較長,一般取前6位即可區分,如果不夠,可以再多取幾位
- 如果git bash視窗未關閉,可以通過視窗記錄,找到并使用之後版本的 commit id進行回退
- 如果git bash視窗重新打開了,也可以使用下述指令找到你 操作Git 的指令曆史記錄,進而找到之後版本的commit id
git reflog
五、标簽
在Git中,不同版本的代碼是以commit id作為版本号進行區分的,但是由于commit id是Git計算生成,不便記憶。故可在指定版本上添加上自定義标簽,便于使用(相當于給某個版本代碼,取個易于記憶的别名,友善日後取用)。
5.1 添加标簽
- 可以使用如下指令給目前所在版本添加标簽
git tag tagName // 在目前版本添加标簽 tagName
git tag v1.0 // 在目前的版本,添加标簽 v1.0
- 如果想給之前的某個版本添加标簽,無須回退到該版本,隻需在上述指令後添加該版本的commit id即可
git tag tagName commitId // 在指定commit id的版本上添加标簽 tagName
git tag v0.8 3cbd33 // 向commit id為3cbd33的版本添加标簽 v0.8
- 像送出版本添加備注資訊便于日後追溯一樣,在添加标簽時,同樣也可以添加關于該标簽的注釋資訊
git tag -a tagName -m <message> // 在目前的版本上添加标簽 tagName,備注資訊為message
git tag -a v1.1 -m "version 1.0 Final" // 在目前版本上添加标簽 v1.1,備注資訊為version 1.0 Final
git tag -a tagName -m <message> commitId // 在指定commit id的版本上添加标簽 tagName,備注資訊為message
git tag -a v0.3 -m "version 0.8 SNAPSHOT" 2caf9b // 在commit id為 2caf9b 的版本上添加标簽 v0.3 tagName,備注資訊為version 0.8 SNAPSHOT
5.2 檢視标簽
- 使用下述指令檢視目前已經添加的所有的标簽名
git tag // 顯示所有添加的标簽名
- 使用下述指令檢視指定标簽版本的資訊,包括commit id、時間 ...
git show tagname // 檢視指定标簽名的版本資訊
git show v0.8 // 檢視标簽v0.8的版本資訊