文章目錄
之前已經學習過git的相關內容,由於長時間沒用,今天就做個總結複習一下。git的安裝就不再進行介紹了。
1. 安裝git後,首先要設置用戶名和郵箱
git config --global user.name "dzysunshine"
git config --global user.email "[email protected]"
2. 創建本地倉庫(Respository)
先在Git目錄下創建一個空目錄,例如名爲learngit的目錄,進入該目錄,通過git init命令將其變爲Git可以管理的目錄。
mkdir learngit
cd learngit
git init
3. 在倉庫中添加內容
使用windows時要注意不要使用記事本編輯文件,使用Notepad++, 默認編碼設置爲UTF-8 without BOM即可,先手動用Notepad++創建一個readme.txt文件,然後執行以下操作。(注意創建的這個文件一定要放到learngit目錄(或其子目錄)下)
#把文件添加到倉庫
git add readme.txt
#通過下面命令告訴Git,把文件提交到倉庫
git commit -m 'create readme.file'
如果有多個文件,可以依次add多次,而commit只需一次。
第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。
4. 查看工作區的狀態
使用 git status 命令。如果 git status 告訴你有文件被修改過,用git diff可以查看修改內容, 用git log命令查看歷史記錄。
git status
git diff readme.txt
5. 版本回退
用 git log 命令可以查看歷史記錄,用 git relog 命令可以查看記錄的每一次命令。
# 查看歷史提交版本的版本號,HEAD表示當前版本
git log --pretty=oneline
# 將當前板本回退到上一次更改的版本
git reset --hard HEAD^
#如果是想回退到上100個版本,可以使用下面代碼
git reset --hard HEAD~100
6. 管理修改
用 git diff HEAD – readme.txt 命令可以查看工作區和版本庫裏面最新版本的區別。
7. 撤銷修改
命令git checkout – readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷。
一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
8. 刪除文件
- 場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令 git checkout – file。
- 場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令 git reset HEAD file ,就回到了場景1,第二步按場景1操作。
- 場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。
- 命令git rm file 用於刪除版本庫中的一個文件。
9. 連接github
#創建SSH Key,一路回車就好
ssh-keygen -t rsa -C "[email protected]
- 第一步,在用戶主目錄裏找到.ssh目錄,裏面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
- 第二步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面。
- 然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容就可以了。
10. 創建遠程倉庫並與本地版本庫關聯
在github上創建一個新的respository,命名爲learngit,並複製SSH地址:
https://github.com/dzysunshine/learngit.git
回到我們的 Git Bash 界面,把本地 Git 庫與剛剛建的遠程倉庫關聯,輸入下列命令
# origin 就是遠程庫的名字
git remote add origin https://github.com/dzysunshine/learngit.git
把本地倉庫的所有文件(剛剛新建的 readme.md)上傳到 GitHub 上(第一次需要加-u,後面就不需要了)
git push -u origin master
在本地 learngit 倉庫中做任何改動後,都可以直接運行下面的語句添加、提交到倉庫並上傳到 GitHub 遠程倉庫中。
git add .
git commit -m "xxx"
git push origin master
11. 從 GitHub 克隆到本地倉庫
要克隆一個倉庫,首先必須知道倉庫的地址,然後使用git clone命令克隆。
Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。
git clone [email protected]:dzysunshine/100-Days-Of-ML-Code.git
12. 創建與合併分支
創建分支
# 創建dev分支,然後切換到dev分支(-b表示創建並切換)
git checkout -b dev
上面一條代碼和下面的兩條代碼效果是相同的(需要注意,新版的git可以使用switch代替chenkout切換分支)
# 創建dev分支
git branch dev
# 切換到dev分支
git checkout dev
查看當前分支
# 查看當前分支
git branch
帶*的表示當前分支
* dev
master
在dev分支工作完成時,將dev分支合併到master分支上,並刪除dev分支
# 先切換到master分支上
git checkout master
# 把dev分支的工作成果合併到master分支上
git merge dev
# 刪除dev分支
git branch -d dev
# 刪除後,查看branch
git branch
小結一下
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>或者git switch <name>
創建+切換分支:git checkout -b <name>或者git switch -c <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
13. 衝突問題
當Git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
解決衝突就是把Git合併失敗的文件手動編輯爲我們希望的內容,再提交。
用git log --graph命令可以看到分支合併圖。
通常分支管理中合併的時候,使用no-off模式比較好,因爲它可以 在merge時生成一個新的commit,這樣,從分支歷史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
開發一個新feature時,最好新建一個分支;如果要丟棄一個沒有被合併過的分支,可以通過git branch -D name強行刪除。
14. 多人協作
多人協作的工作模式通常是這樣:
- 首先,可以試圖用git push origin 推送自己的修改;
- 如果推送失敗,則因爲遠程分支比你的本地更新,需要先用git pull試圖合併;
- 如果合併有衝突,則解決衝突,並在本地提交;
- 沒有衝突或者解決掉衝突後,再用git push origin 推送就能成功!
如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream-to origin/。
這就是多人協作的工作模式,一旦熟悉了,就非常簡單。
15. 常用命令
- cd :用來切換工作目錄,最常用的一個命令。簡單來講,cd A文件夾就是進入到A文件夾裏面的意思。
- git status .:查看當前路徑下的的狀態。git下最最常用的一個命令。
- git add .: 把工作區的所有變化,(就是你的所有改動),都添加到 版本庫/暫存區。
- git commit -m “提交時說明信息”: 更進一步提交,並說明提交log。
- git push: 把版本庫的所有更新內容, 都推送到遠程服務器。(就是推代碼/推上去)
- git pull: 把代碼從遠程服務器拉取到本地。(俗稱拉代碼)
- git log:查看提交歷史,與各次的提交說明。
- git diff:比較工作區與暫存區的差異,就是比較看看你到底都做了什麼修改。
- git clone url地址: 將遠程服務器上項目克隆到新創建的目錄中(第一次拉項目時使用, 後面的更新都用 git pull了)。