《廖雪峯Git教程》學習記錄

《廖雪峯Git教程》學習記錄

作者:婷婷

摘要:這段時間學習了廖雪峯老師的Git教程,廖老師已經寫得非常易懂了,本人在此處記錄了學習到的在windows環境下Git的基本用法,寫此博客,便於日後查找。具體詳細內容請參考廖雪峯老師教程

1.創建版本庫

注:Git跟蹤並管理的是修改,而非文件

工作區:在電腦裏可以看到的目錄;

暫存區:Git版本庫裏,稱爲stage或index的部分;

分支:Git自動創建的master。

  • 創建版本庫
  1. 創建空目錄
$ mkdir learngit
$ cd learngit
  1. 初始化倉庫
$ git init

在創建的空目錄下編寫一個README.md文件,內容隨意。

  1. 將文件添加到倉庫
$ git add README.md
  1. 將文件提交到倉庫
$ 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

  1. 回退到上一個版本:
$ git reset --hard HEAD^
  1. 回退到指定版本:
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加密,具體設置方法如下:

  1. 創建SSH Key

在windows下,打開Git Bash,創建SSH Key:

$ ssh-keygen -t rsa -C "[email protected]"

注意替換郵件地址爲自己的郵件地址,一路回車。 之後可以在用戶主目錄裏找到.ssh目錄,裏面有id_rsaid_rsa.pub兩個文件,這兩個就是SSH Key的祕鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

  1. 登陸GitHub創建連接

打開“Account settings”,“SSH Keys”頁面,然後,點“Add SSH Key”,填上任意Title,在Key文本框裏粘貼id_rsa.pub文件的內容。

  1. 添加遠程庫
  • 登陸GitHub,然後,在右上角找到“Create a new repo”按鈕,創建一個新的倉庫 。
  • 在Repository name填入learngit,其他保持默認設置,點擊“Create repository”按鈕,創建一個新的Git倉庫。
  1. 把本地倉庫的內容推送到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 從遠程倉庫克隆

  1. 登陸GitHub,創建新的倉庫。
  2. 克隆一個本地庫:
git clone [email protected]:username/repo-name.git

7. 管理分支

  1. 創建分支dev
$ git checkout -b dev

git checkout命令加上-b參數表示創建並切換,等價於:

$ git branch dev
$ git checkout dev
  1. 查看當前分支
$ git branch
  1. 切換回master主分支
$ git checkout master

也可以使用switch語句。

  • 切換分支
$ git switch -c dev
  • 切換回master
$ git switch master
  1. 合併分支
$ git merge dev
  1. 刪除分支
$ git branch -d dev
  1. 查看分支合併圖
$ git log --graph --pretty=oneline --abbrev-commit
  1. 解決衝突的辦法

修改衝突部分內容後,重新提交到Git倉庫。

  1. 合併分支時關閉Fast Forward模式
$ git merge --no-ff -m "merge with no-ff" dev
  1. 修復分支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}
  1. 強行刪除

要丟棄一個沒有被合併過的分支,可以通過

$ git branch -D <name>

強行刪除 。

  1. 多人協作
  • 查看遠程庫信息
$ git remote

或者:

$ git remote -v
  • 推送分支
$ git push origin <分支name>
  • 抓取分支
$ git clone [email protected]:username/repo-name.git

默認抓取本地的master分支。 要在dev分支上開發,就必須創建遠程origindev分支到本地:

$ git checkout -b dev origin/dev

推送衝突時:

先用git pull把最新的提交從origin/dev抓下來,然後,在本地合併,解決衝突 。

$ git pull

git pull也失敗了,原因是沒有指定本地dev分支與遠程origin/dev分支的鏈接,根據提示,設置devorigin/dev的鏈接,之後再git pull

$ git branch --set-upstream-to=origin/dev dev
$ git pull

本地合併衝突時,手動解決,參考7.解決分支衝突的辦法部分內容。

  1. 分支整理

把本地未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參與開源項目

  1. 將開源項目Fork到自己的GitHub賬號下
  2. 從自己的賬號下克隆項目
git clone [email protected]:username/project.git
  1. 修改完成後推送到自己的倉庫
  2. GitHub上發起pull request

10. 自定義Git

  • 顯示顏色
git config --global color.ui true

忽略文件的原則是:

  1. 忽略操作系統自動生成的文件,比如縮略圖等;
  2. 忽略編譯生成的中間文件、可執行文件等,也就是如果一個文件是通過另一個文件自動生成的,那自動生成的文件就沒必要放進版本庫,比如Java編譯產生的.class文件;
  3. 忽略你自己的帶有敏感信息的配置文件,比如存放口令的配置文件。

具體gitignore文件規則

  • 強制添加忽略文件
git add -f <file>
  • 查看錯誤規則
$ git check-ignore -v <file>

參考文獻

廖雪峯的官方網站Git教程

發佈了8 篇原創文章 · 獲贊 6 · 訪問量 3867
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章