《廖雪峯Git教程》學習記錄
作者:婷婷
摘要:這段時間學習了廖雪峯老師的Git教程,廖老師已經寫得非常易懂了,本人在此處記錄了學習到的在windows環境下Git的基本用法,寫此博客,便於日後查找。具體詳細內容請參考廖雪峯老師教程。
文章目錄
1.創建版本庫
注:Git跟蹤並管理的是修改,而非文件
工作區:在電腦裏可以看到的目錄;
暫存區:Git版本庫裏,稱爲stage或index的部分;
分支:Git自動創建的master。
- 創建版本庫
- 創建空目錄
$ mkdir learngit
$ cd learngit
- 初始化倉庫
$ git init
在創建的空目錄下編寫一個README.md
文件,內容隨意。
- 將文件添加到倉庫
$ git add README.md
- 將文件提交到倉庫
$ git commit -m "wrote a readme file"
其中,git add <file>
可反覆使用,添加多個文件後,再使用git commit -m <message>
一次提交所有文件。
2. 版本回退
提交了不合適的修改到版本庫時,想要撤銷本次提交,可使用版本回退。
- 查看提交日誌
$ git log
或者查看簡化版,顯示的第一部分爲commit id
(版本號):
$ git log --pretty=oneline
- 版本回退
在Git中,用HEAD
表示當前版本,也就是最新的commit id
,上一個版本就是HEAD^
,上上一個版本就是HEAD^^
,往上100個版本寫100個^
比較容易數不過來,所以寫成HEAD~100
。
- 回退到上一個版本:
$ git reset --hard HEAD^
- 回退到指定版本:
git reset --hard <commit id的前五個字符>
- 查看命令日誌
可以看到每一條自己輸入的歷史命令。
$ git reflog
3. 管理修改
- 查看狀態
$ git status
- 查看工作區與版本庫的區別
$ git diff HEAD -- <file>
4. 撤銷修改
-
撤銷暫存區修改
暫存區的修改回退到工作區。具體指已經使用
git add <file>
命令的情況。命令:
git reset HEAD <file>
或:
git restore --staged <file>
-
丟棄工作區的修改
命令:
git checkout -- <file>
或:
git restore <file>
git checkout
是用版本庫裏的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原” 。
5. 刪除文件
- 刪除工作區文件
$ rm <file>
- 刪除版本庫文件
$ git rm <file>
$ git commit -m <message>
6. 遠程倉庫
6.1 創建遠程倉庫
使用GitHub
網站作爲自己的遠程倉庫。註冊一個賬戶,即可獲得免費的Git
遠程倉庫。
本地Git
倉庫與GitHub
倉庫之間的傳輸通過SSH加密,具體設置方法如下:
- 創建
SSH Key
在windows下,打開Git Bash,創建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
文件的內容。
- 添加遠程庫
- 登陸
GitHub
,然後,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫 。 - 在Repository name填入
learngit
,其他保持默認設置,點擊“Create repository”按鈕,創建一個新的Git倉庫。
- 把本地倉庫的內容推送到
GitHub
倉庫
- 將本地庫與遠程庫關聯:
$ git remote add origin [email protected]:username/learngit.git
注意替換username爲自己的GitHub用戶名。 遠程庫的名字就是origin
,這是Git默認的叫法 。
第一次使用Git的clone
或者push
命令連接GitHub時,會得到一個警告,選yes即可。
- 將本地庫的內容推送到遠程:
$ git push -u origin master
第一次推送master分支時加-u
, 加上了-u
參數,Git不但會把本地的master
分支內容推送的遠程新的master
分支,還會把本地的master
分支和遠程的master
分支關聯起來,在以後的推送或者拉取時就可以簡化命令 。 每次本地提交後,只要有必要,就可以使用命令:
git push origin master
推送最新修改 。
6.2 從遠程倉庫克隆
- 登陸GitHub,創建新的倉庫。
- 克隆一個本地庫:
git clone [email protected]:username/repo-name.git
7. 管理分支
- 創建分支
dev
$ git checkout -b dev
git checkout
命令加上-b
參數表示創建並切換,等價於:
$ git branch dev
$ git checkout dev
- 查看當前分支
$ git branch
- 切換回master主分支
$ git checkout master
也可以使用switch
語句。
- 切換分支
$ git switch -c dev
- 切換回master
$ git switch master
- 合併分支
$ git merge dev
- 刪除分支
$ git branch -d dev
- 查看分支合併圖
$ git log --graph --pretty=oneline --abbrev-commit
- 解決衝突的辦法
修改衝突部分內容後,重新提交到Git倉庫。
- 合併分支時關閉
Fast Forward
模式
$ git merge --no-ff -m "merge with no-ff" dev
- 修復分支bug
- 保存工作現場
$ git status
- 創建臨時分支
確定要在哪個分支上修復bug,假定需要在master
分支上修復,就從master
創建臨時分支:
$ git checkout master
$ git checkout -b issue-101
在臨時分支修復bug,提交內容。
$ git add <file>
$ git commit -m "fixed bug 101"
切換回master分支,併合並臨時分支,然後刪除臨時分支。
- 恢復工作現場
返回工作分支:
$ git switch dev
查看工作現場列表:
$ git stash list
恢復現場:
$ git stash pop
- 修復工作現場同樣的bug
$ git cherry-pick <bug fixed id>
多次stash,恢復的時候,先用git stash list
查看,然後恢復指定的stash,用命令:
$ git stash apply stash@{0}
- 強行刪除
要丟棄一個沒有被合併過的分支,可以通過
$ git branch -D <name>
強行刪除 。
- 多人協作
- 查看遠程庫信息
$ git remote
或者:
$ git remote -v
- 推送分支
$ git push origin <分支name>
- 抓取分支
$ git clone [email protected]:username/repo-name.git
默認抓取本地的master
分支。 要在dev
分支上開發,就必須創建遠程origin
的dev
分支到本地:
$ git checkout -b dev origin/dev
推送衝突時:
先用git pull
把最新的提交從origin/dev
抓下來,然後,在本地合併,解決衝突 。
$ git pull
git pull
也失敗了,原因是沒有指定本地dev
分支與遠程origin/dev
分支的鏈接,根據提示,設置dev
和origin/dev
的鏈接,之後再git pull
:
$ git branch --set-upstream-to=origin/dev dev
$ git pull
本地合併衝突時,手動解決,參考7.解決分支衝突的辦法部分內容。
- 分支整理
把本地未push的分叉提交歷史整理成直線 。
$ git rebase
8. 管理標籤
標籤tag與某個commit綁在一起,易於記憶,比如:commit號是6a5819…的tag是v1.1。
- 創建標籤
$ git tag <tagname>
- 查看標籤
$ git tag
- 對指定commit打標籤
$ git tag <tagname> <commit id>
標籤不是按時間順序列出,而是按字母排序。
- 查看標籤信息
$ git show <tagname>
- 創建帶有說明的標籤
$ git tag -a v1.0 -m "version 1.0 released" 1094abd
- 刪除本地標籤
$ git tag -d v1.0
- 推送標籤到遠程
$ git push origin v1.0
或者推送所有本地標籤:
$ git push origin --tags
- 刪除已推送的標籤
先刪除本地標籤:
$ git tag -d v1.0
再刪除遠程標籤:
git push origin:refs/tags/v1.0
9. 使用GitHub參與開源項目
- 將開源項目
Fork
到自己的GitHub
賬號下 - 從自己的賬號下克隆項目
git clone [email protected]:username/project.git
- 修改完成後推送到自己的倉庫
- 在
GitHub
上發起pull request
10. 自定義Git
- 顯示顏色
git config --global color.ui true
忽略文件的原則是:
- 忽略操作系統自動生成的文件,比如縮略圖等;
- 忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的
.class
文件; - 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。
- 強制添加忽略文件
git add -f <file>
- 查看錯誤規則
$ git check-ignore -v <file>