目錄
- 1、語法說明
- 2、本地倉庫相關操作
- 建立一個git文件(git init)
- 把工作區的文件添加到暫存區(git add)
- 把暫存區的文件添加到本地倉庫(git commit)
- 查看暫存區和本地倉庫中的文件(git ls-files)
- 查看文件夾下所有文件的狀態(git status)
- 查看版本庫中的提交記錄(git log)
- 恢復的文件(git checkout)
- 版本退回(git reset)
- 查看本地倉庫文件和暫存區文件中的內容(git show)
- 文件差異對比(git diff)
- 忽略文件(.gitignore)
- 3、SSH簡介(密鑰,GitHub)
- 在本地生成公鑰和私鑰
- 在GitHub中添加公鑰
- 4、遠程倉庫(GitHub)相關操作
- 下載GitHub上的代碼(git clone)
- 下載被更新代碼(git pull)
- 上傳修改的代碼(git push)
1、語法說明
被”< >“和"[ ]“包含起來的內容表示用戶自己選定的參數。但”< >“是要求用戶必須輸入的,而”[ ]"表示用戶可以根據自己的需要選擇輸入。
比如git reset的語法是這樣的:
git reset commit <commitid> --[option]
其中commitid指的是commit id,可以理解為每一提交到本地倉庫之后該倉庫狀態的ID,利用這個ID我們可以快速定位到某個狀態。
那么以下兩個種方式都是合理的:
git reset commit 7b0dcac
git reset commit 7b0dcac --soft
2、本地倉庫相關操作
建立一個git文件(git init)
用git Bash進入一個新的文件夾,輸入以下命令可以建立一個git文件。
git init
查看一下是否有.git文件
把工作區的文件添加到暫存區(git add)
git add <object_file>
把暫存區的文件添加到本地倉庫(git commit)
方法一:提交之后再進入vim編輯器寫入這次提交的備注
git commit
方法一:提交的同時寫入備注
git commit -m <"any information you wanna write.">
查看暫存區和本地倉庫中的文件(git ls-files)
git ls-files
查看文件夾下所有文件的狀態(git status)
git status
查看版本庫中的提交記錄(git log)
版本庫即本地倉庫。
方法一:直接查看提交記錄的完整信息
git log
箭頭所指的是每次提交更新之后本地倉庫狀態的哈希值,也可以理解該時間點本地倉庫狀態對應的ID,用的時候經常拿一部分來用即可。
方法二:查看部分重要信息
git log --oneline
紅框內是哈希值的前N位,一般用這個來對應每一個的提交信息即可。
恢復的文件(git checkout)
- 在工作區中的文件被修改之后,卻想要恢復到修改前的狀態,但還未提交到暫存區和本地倉庫。
git checkout <object_file>
注:git checkout默認只是恢復到上一次的狀態,如果想要恢復到更久以前的狀態,請繼續往下看。再者,這一小節的修改,不僅指修改了文件,還可以指文件被刪除了。
- 在工作區中的文件被修改之后,卻想要恢復到修改前的狀態,但已經提交到暫存區和本地倉庫。
- 在工作區中的文件被修改之后,卻想要恢復到以前的某個狀態,但已經提交到暫存區和本地倉庫。
git checkout commit <commitid> <object_file>
注:這里的ID即是第N次提交記錄的哈希值。該指令可以把object_file文件恢復到第N次提交時候的狀態。
版本退回(git reset)
版本退回有三種方式,分別是soft, hard, mixed。其中的mixed也是默認(default)的方式。
默認的方式下,本地倉庫的記錄會退回到之前的某個時間點。但工作區和暫存區保持不變。
git reset <commitid>
soft的方式下,本地倉庫和暫存區的狀態會退回到之前的某個時間點。但工作區保持不變。
git reset <commitid> --soft
soft的方式下,本地倉庫、暫存區和工作區的狀態都會退回到之前的某個時間點。
git reset <commitid> --hard
用git reset --hard,打個比方。比如你在早上8:00向本地倉庫提交了一次更新,版本庫記錄這次更新后的狀態ID為123456。接著你繼續工作到中午12:00,但此時你發現你早上的工作方向全錯了,想要恢復早上8:00時的文件狀態,就可以使用git reset 123456 --hard。
查看本地倉庫文件和暫存區文件中的內容(git show)
查看暫存區中文件的內容。
git show :<object_file>
查看本地倉庫里某次狀態下的文件內容。
git show <commitid>:<object_file>
文件差異對比(git diff)
1、對比工作區和暫存區文件的差異
git diff [object_file]
可以看到這里的object_file是被”[ ]“包含起來的,說明這個參數可寫也可不寫,不寫的話表示對比所有文件的差異,寫則表示只對比某個文件的差異。
2、對比工作區和本地倉庫文件內容之間的差異
git diff <commitid> [oject_file]
3、對比本地倉庫中兩個版本的差異
git diff <commitid> <commitid> [object_file]
4、對比兩個文件之間的差異
git diff <object_file_1> <object_file_2>
忽略文件(.gitignore)
在一個項目中,經常會生成一些中間文件,比如C++在Windows編譯之后有一個.exe文件,而這些文件我們并不希望它被上傳到本地倉庫中。那么,我們就可以利用.gitignore文件去隱藏那些我們不希望上傳的文件。
第一步:創建一個.gitignore文件
vim .gitignore
第二步:在.gitignore文件里寫入我們希望被忽略的文件名。(比如所有的.exe文件)
echo *.exe -> .gitignore
3、SSH簡介(密鑰,GitHub)
在傳統的網絡通信當中,訪問一個網站存在被第三方截取數據的風險,更甚至當你以自己的用戶名和密碼登錄該網站的時候,這些信息也有可能被竊取。于是為了規避這種風險,人們提出了ssh。
SSH(Secure Shell): 一種網絡安全協議,讓信息以加密的形式進行傳輸。具體體現為ssh通信依賴公鑰和私鑰這兩把鑰匙來加密和解析數據。
無論是公鑰還是私鑰都由本地計算機生成,然后本地計算機會把公鑰發給目標服務器。目標服務器所發送的信息都會用公鑰進行加密,當收到信息之后,本地計算機再用私鑰進行數據解析。由于公鑰加密的信息只能用私鑰進行解析,而私鑰一直存在于本地PC之中,所以不可能被第三方通過網絡竊取。通過這種設置,即便第三方通信數據,也因為只有一把鑰匙而無法解析。
以上只是一些關于SSH的粗略理解,事實上公鑰私鑰只用于SSH握手過程的相互確認身份,具體的信息傳遞還是其他一些加密方法。
在本地生成公鑰和私鑰
進入git bash
第一步,切換到根目錄且進入.ssh文件夾。
cd ~
cd .ssh
第二步,生成密鑰。
sshtest-keygen -t rsa -b 4096
第三步,輸入密鑰的名稱(例如test)。
第四步,輸入密碼。
通過這個這兩部操作,會生成test和test.pub兩個文件,前者是私鑰文件,后者是公鑰文件。
第五步,創建config文件,指定使用該密鑰文件來認證GitHub。
tial -5 config
最后一步,進入test.pub文件,復制公鑰添加在GitHub中。
在GitHub中添加公鑰
通過上一個步驟,我們獲取了本地計算機生成的公鑰。接下來進入GitHub添加公鑰。
如圖,先進入GitHub頁面,點擊自己的頭像,再點擊Settings…
通過以上的操作,接下來我們用本地計算機訪問GitHub的時候,GitHub便知道是哪臺計算機訪問它了,以便接下來我們將GitHub的遠程倉庫和本地倉庫連接起來。
4、遠程倉庫(GitHub)相關操作
下載GitHub上的代碼(git clone)
下載GitHub上的代碼可以通過命令行的方式,也可以通過網頁點擊的方式。網頁點擊則相對簡單,如圖,直接點擊Download ZIP即可以下載相應的壓縮包。
命令行的方式則有三種,HTTPS, SSH, GitHub CLI。這三種方式只是復制對應的鏈接,然后在git bash輸入命令行即可。
git clone <link>
在我們克隆(clone)別人的倉庫之后,也可以用git log去查看作者的修改記錄。
下載被更新代碼(git pull)
如果我們想獲取代碼作者在GitHub上作的修改,最笨的方法當然是重新下載一遍,但也可以用git pull命令更新所修改的內容。但需要注意的是,使用git pull命令必須先進入相應的文件夾。
git pull
上傳修改的代碼(git push)
我們在本地修改代碼并添加到本地倉庫之后可以用git push命令來將代碼上傳到GitHub上。但這不意味著你可以隨隨便便的將自己的代碼push到別人的倉庫中,一般而言需要得到作者的許可。而對于自己的倉庫,GitHub會通過用戶名或ssh的密鑰來自動匹配你的權限。
git push