Github學習筆記 —— 基本操作與概念
最近在使用在線環境進行學習,但是又不想學習過程中的代碼直接丟掉,因此就嘗試着使用Github將代碼進行管理。學習筆記一方面爲了防止學習過程中使用到的指令忘記,另一方面也爲了加深印象。
-
git --version
-
git clone [倉庫地址]
eg:git clone https://github.com/Hualuoxi/Shiyanlou-001.git
-
在 GitHub 上創建一個倉庫時,同時生成了倉庫的默認主機名 origin,並創建了默認分支 master。GitHub 可以看成是免費的 Git 服務器,在 GitHub 上創建倉庫,會自動生成一個倉庫地址,主機就是指代這個倉庫,主機名就等於這個倉庫地址。克隆一個 GitHub 倉庫(也叫遠程倉庫)到本地,本地倉庫則會自動關聯到這個遠程倉庫。執行 git remote -v 命令可以查看本地倉庫所關聯的遠程倉庫信息。
-
git remote -v
-
Git 要求對本地倉庫關聯的每個遠程主機都必須指定一個主機名(默認爲 origin),用於本地倉庫識別自己關聯的主機,git remote 命令就用於管理本地倉庫所關聯的主機,一個本地倉庫可以關聯任意多個主機(即遠程倉庫)。
-
克隆遠程倉庫到本地時,還可以使用 -o 選項修改主機名,在地址後面加上一個字段作爲本地倉庫的主目錄名
eg:git clone -o hualuo https://github.com/Hualuoxi/Shiyanlou-001.git Sillycat
-
所有的Git命令均以git開頭
-
Git 本地倉庫有三大區域:工作區、暫存區、版本區。
-
git status
新建文件後,命令行前綴出現*****號表示工作區或者暫存區有變化,對文件進行增刪操作均會出現,使用
git status
命令可以查看詳情
-
git add [文件名]
對多個文件同時進行增刪修改使用
git add .
命令全部添加到暫存區。當修改了工作區,git add
命令是將這些修改添加到暫存區,暫存區記錄的只是修改。 -
git reset -- [文件名]
git rm --cached [文件名]
若取消後面的文件名使用`git reset --`即可把**暫存區所有的修改撤銷**,又回到工作區。
-
git diff
執行該命令後會進入工作區修改詳細頁面,按Q退出
-
只有在版本區中存在的文件纔是被跟蹤文件。
-
git diff --cached
-
git commit
一個必須的選型
-m
用來提供該提交的備註提交後暫存區的修改被清空
-
git log
輸入後跳入新界面,Q鍵退出
git log [分支名]
git log --oneline
git log -n
git log --author [貢獻者名字]
git log --graph
git log --reverse
-
對Git進行本地配置,將修改提交到版本區需要驗證身份
git config --global user.email "[email protected]"
git config --global user.name "xxxxx"
git config -l
-
git branch -avv
第一行,開頭的星號表示當前所在分支,綠色的 master 是分支名,之所以是綠色,也是因爲它是當前所在分支。後面第二項是版本號,第三項中括號裏面藍色的字,表示此分支跟蹤的遠程分支的名字,當然啦,這也是克隆遠程倉庫到本地時的默認設置 – 創建 master 分支並自動跟蹤遠程同名分支;冒號後面黑色文字表示本地分支領先其跟蹤的遠程分支一個提交。最後一項是提交時填寫的備註信息。
第二行,是 Git 指針信息,它指向遠程倉庫的 master 分支。
第三行,遠程分支信息。
-
git push
需要聯網,因爲操作對遠程倉庫進行了修改
-
git reset --soft HEAD^
--soft
表示軟退回,對應的還有--hard
硬退回,HEAD^
表示撤銷一次提交,HEAD^^
表示撤銷兩次提交,撤銷 n 次可以簡寫爲HEAD~n
。軟退回一個提交後執行
git branch -avv
命令查看分支信息執行
git status
查看倉庫狀態,上一個提交中的修改全部扔回了暫存區
撤回後再修改的版本會出現時間線分叉,執行git status
和git branch -avv
查看倉庫狀態和分支狀態本地倉庫的 master 分支與遠程倉庫的 origin/master 分支在提交版本上有了衝突,又叫做提交時間線分叉。因爲剛纔的提交操作不是基於遠程倉庫 origin/master 分支的最新提交版本,而是撤回了一個版本。這種情況下也是可以將本地 master 分支推送到遠程倉庫的,需要加一個選項
-f
,它是--force
的簡寫,這就是強制推送 -
git reflog
退回之前的版本,可以直接執行命令
git reset --hard [版本號]
,如果記不清版本號,也可以根據上圖的信息,執行git reset --hard HEAD@{x}
命令,其中HEAD@{x}
就是上圖所示,這個命令的意思是回到當前分支最近x次提交版本變化前
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190805174850406.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDEzODg2MTgz,size_16,color_FFFFFF,t_70)
-
爲避免每次提交文件都需要手動輸入用戶名和密碼,可以在系統中創建SSH公私匙,並將其放到Github中。如此操作即可生成Github賬戶對於當前系統中的Git授權。
執行以下命令生成公私匙
ssh-keygen
公私匙存放在home目錄下的隱藏目錄.ssh的兩個文件中
將
~/.ssh/id_rsa.pub
文件中的公鑰內容複製出來。
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/2019080517494551.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDEzODg2MTgz,size_16,color_FFFFFF,t_70)
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190805174955745.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDEzODg2MTgz,size_16,color_FFFFFF,t_70)
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190805175008574.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDEzODg2MTgz,size_16,color_FFFFFF,t_70)
**只有使用這種git開頭的地址克隆倉庫,SSH關聯纔會起作用**
使用 SSH 的好處主要有兩點:
- 免密碼推送,執行 `git push` 時不再需要輸入用戶名和密碼了;
- 提高數據傳輸速度。
-
git config --global alias.[別名] [原命令]
如果原名中存在選項,則需要加引號
-
git config -l
-
git fetch
若發現有更新,可以執行
git pull
命令來拉取遠程分支到本地,pull
是拉取遠程倉庫的數據到本地,需要聯網,而由於前面執行過git fetch
命令,所以也可以執行git rebase origin/master
命令來實現 “使本地 master 分支基於遠程倉庫的 master 分支”。 -
git branch [分支名]
-
git checkout [分支名]
-
git checkout -b [分支名]
-
在哪個分支上創建新分支,新分支的提交記錄就與哪個分支一致。新建分支並無跟蹤任何遠程分支,所以沒有 master 分支中的中括號和括號內的藍色遠程分支名。
-
git push [主機名] [本地分支名]:[遠程分支名]
通常冒號前後的分支名是相同的,如果是相同的,可以省略
:[遠程分支名]
,如果遠程分支不存在,會自動創建。 -
git branch -u [主機名/遠程分支名] [本地分支名]
關聯後的分支只需要使用
git push
即可直接進行推送。如果是設置當前所在分支跟蹤遠程分支,最後一個參數本地分支名可以省略不寫。這個命令的
-u
選項是--set-upstream
的縮寫。事實上可以讓本地分支跟蹤遠程非同名分支,儘管幾乎遇不到這種自找麻煩的需求。同樣的,執行git branch --unset-upstream [分支名]
可以撤銷該分支對遠程分支的跟蹤,如果撤銷當前所在的分支的跟蹤,分支名可以省略不寫。在推送的時候,加個
--set-upstream
或其簡寫-u
選項可以在推送時就自動跟蹤遠程分支。而不需要先推送到遠程倉庫,使遠程倉庫創建新的分支,然後再執行命令使本地分支跟蹤遠程分支。 -
git push [主機名] :[遠程分支名]
git push [主機名] :[遠程分支名] :[遠程分支名] :[遠程分支名]
此命令的原理是將空分支推送到遠程分支。
git push [主機名] --delete [遠程分支名]
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190805175152183.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDEzODg2MTgz,size_16,color_FFFFFF,t_70)
![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20190805175246250.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxNDEzODg2MTgz,size_16,color_FFFFFF,t_70)
-
git branch -D [分支名]
同樣地,此命令也可以一次刪除多個,將需要刪除的分支名羅列在命令後面即可。需要注意的一點:當前所在的分支不能被刪除。
-
git branch -m [原分支名] [新分支名]
若修改當前所在分支的名字,原分支名可以省略不寫。