git學習筆記
1.Git簡介
git安裝與配置
- 首先從git官網下載git安裝,然后再打開git bash,配置以下指令:
//使用--global參數,表明本地所有倉庫都使用這個配置,也可以對不同倉庫單獨配置
git config --global user.name "your name"
git config --global user.email "your email"
//可使用如下命令查看自己的用戶名和email
git config [ user.name|email ]
創建版本庫
版本庫又名倉庫,英文名repository,你可以簡單理解成一個目錄,這個目錄里面的所有文件都可以被Git管理起來,每個文件的修改、刪除,Git都能跟蹤,以便任何時刻都可以追蹤歷史,或者在將來某個時刻可以“還原”。
- 創建一個新文件夾當作倉庫
- 使用
git init命令把這個目錄變成Git可以直接管理的倉庫
$ mkdir repositories
$ cd repositories
$ pwd //輸出==> '/d/Development Kit/Repositories'
$ git init
pwd命令顯示當前路徑
使用Git上傳文件到倉庫
? 使用Git只能管理一些純文檔的文件,比如文字、代碼等,Git每次都能檢測到詳細的變動,而像音頻、圖像等二進制形式的文件,Git只能檢測到大小變化,無法獲取詳細的內容變化。
? 使用Git上傳文件到版本庫,需先在Git管理下的倉庫中執行,子目錄也可以,非Git管理目錄Git是檢測不了的。一般分兩步:
-
1、使用
git add filename告訴Git添加文件filename到倉庫$ git add readme.txt //沒有任何提示則執行成功 //readme.txt文件內容: i am very happy i got a job -
2、使用
git commit -m "說明"提交內容到倉庫$ git commit -m "第一次提交readme.txt" [master (root-commit) e5d334f] my first readme 1 file changed, 2 insertions(+) create mode 100644 readme.txt- 1 file changed : 一個文件改變
- 2 insertions:插入了兩行內容
-
使用
git add可以多次添加多個文件,而git commit則一次性提交多個文件
$ git add file1.txt
$ git add file2.txt file3.txt
2.時光穿梭機
$ git status //查看工作區的狀態,可看到是否有文件被修改,亦或是未準備提交
$ git diff //difference的縮寫(unix),可查看文件改變的具體內容
版本回退
commit快照:Git會自動保存歷史版本記錄,方便用戶回退版本
-
使用
git log查看歷史版本記錄,每條記錄由版本號、作者、修改日期和說明組成git log [--pretty=oneline] -
git中通常使用
git reset命令來進行版本回退,其中用head來表示當前版本,head是指向當前版本的一個指針
git reset --hard head^ //回退到上一個版本
git reset --hard head^^ //回退到上上個版本
git reset --hard head~100 //回退到往上100個版本
- 若我們回退到了舊版本,但后悔了,想回退到新版本,則只需使用版本號即可
git log
git reset --hard x_xx //版本號可以不用寫全,但必須保證不會出現二義性
例如:
$ git reset --hard e94a445ede7bf9706a44ec96ec791f
HEAD is now at e94a445 append GPL
- 使用
git reflog可以查看歷史命令,以確定回到相應版本
$ git reflog
e94a445 (HEAD -> master) HEAD@{0}: reset: moving to e94a445ede7bf9706a44ec96ec791f
26ad658 HEAD@{1}: reset: moving to head^
e94a445 (HEAD -> master) HEAD@{2}: commit: append GPL
26ad658 HEAD@{3}: commit: 覆蓋原語句
e5d334f HEAD@{4}: commit (initial): my first readme
工作區和暫存區
1、工作區
? 即電腦中我們能看到的目錄
2、版本庫
? 工作區中有一個隱藏目錄.git,則叫Git的版本庫。Git的版本庫主要有stage(暫存區)、Git自動幫我們創建的第一個分支master,以及指向master的指針Head。 
注:若在工作區添加了新文件且未提交,則Git會提示untracked file
3、添加文件到版本庫
? 之前我們把文件添加到版本庫分為兩步,現在再具體剖析一下:
- 首先我們修改后的文件存放在
工作區中,然后通過git add files把工作區中的文件放入暫存區中。 - 然后使用
git commit -m命令將暫存區中的所有文件一次性提交到當前分支下。 - commit后且工作區沒有做任何改變,則stage暫存區就是空的。
4、關于git diff
git diff //比較工作區和暫存區
git diff HEAD -- filename //比較工作區和倉庫
git diff --cached //比較暫存區和倉庫
- 若暫存區為空,則比較工作區和倉庫。此時
git diff <=> git diff HEAD(比較工作區與倉庫) - 若暫存區不為空,則比較工作區和暫存區。
git diff --cached比較暫存區和倉庫
管理修改
? Git基于追蹤修改來管理文件版本,只有add到暫存區的文件,才會被commit到倉庫中。
若:
- 第一次修改file1 => git add file1 => 第二次修改file1 => git commit -m "",則只會提交第一次的修改版本。
- 如果一個文件修改過了,則應及時加入暫存區,或在commit時先
git status一下。
撤銷修改
git checkout --file //可用于丟棄工作區的修改,讓文件回到最近一次'git commit'或'git add'時的狀態
兩種情況:
1、當文件自修改后還未放入暫存區時,git checkout讓文件回到與版本庫一樣的狀態
2、當文件放入暫存區后又做了修改時,git checkout則讓文件回到添加到暫存區時一樣的狀態
刪除文件
? 當我們在工作區刪除了一個文件file,使用git status可以看到文件被刪除的操作,如果真要刪除這個文件,那么就繼續使用
git rm file,然后再git commit,文件就徹底從工作區和版本庫中刪除了。
? 如果是誤刪了,則可以使用git checkout -- file從版本庫中恢復最新版本的文件。
PS :一旦執行了git rm file或手動刪除后執行了git add file,則git checkout -- file無法恢復,只能回退版本
3.遠程倉庫
添加一個遠程庫
? 現在我們在本地已經有了一個git庫,如果我們想在Github上也創建一個遠程庫,并且讓這兩個庫相互關聯、同步。方法如下:
-
首先在Github上新建一個倉庫,這里命名為gitStudy
-
接著我們在想與之關聯的本地庫中,打開Git Bash,然后執行如下命令,執行成功后本地庫就與Github上的遠程庫關聯好了。
$ git remote add origin git@github.com:hsn951/gitStudy.git //執行上述指令后,本地庫就可與遠程庫相關聯 $ git push -u origin master //把本地內容推送到遠程庫 //由于遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以后的推送或者拉取時就可以簡化命令。 $ git push origin master //之后可直接push?。?!然而,在執行時卻報了一個這樣的錯誤
Permission denied (publickey). fatal: Could not read from remote respository.原因:通常是由于個人Github 平臺沒有添加公鑰,需要進一步添加密鑰
解決方法:
? 1.生成公鑰和密鑰
右鍵桌面打開Git Bash,執行ssh-keygen -t rsa -C "xxx@qq.com",直接敲三次回車后生成公鑰和密鑰。
? 2.找到c:/user/電腦賬戶/.ssh/id_rsa.pub文件,復制你的公鑰
? 3.進入Github,點擊頭像=》找到設置=》找到SSH=》new 一個
最后再執行一遍git push -u 即可。
-
刪除遠程庫
如果我們想要刪除一個遠程庫,通常使用git remote rm 遠程庫名,其實只是解綁了本地庫和遠程庫的關聯$ git remote rm origin $ git remote -v //也可以先在刪除前查看一下遠程庫的信息
從遠程庫克隆
? 克隆一個Github上的倉庫到本地庫
$ git clone git@github.com:hsn951/res_1.git //此處用的是SSH

浙公網安備 33010602011771號