1. 程式人生 > >github和git

github和git

Github

Shadowsocks翻牆神器
倉庫(Repository)
倉庫即你的專案,想在github上開源一個專案就必須新建一個Repository,如果開源的專案多了,就有了多個Repository

複製克隆專案(Fork)
李四fork張三倉庫,則克隆一個一模一樣的張三的專案,且該fork專案是獨立存在的
在這裡插入圖片描述
發起請求(pull request)
如果李四更新一個a1.php檔案,同時傳送請求給張三。張三檢視後覺得不錯會合併到原倉庫中
在這裡插入圖片描述
關注(watch)
關注一個專案,只要這個專案有任何更新都會第一時間收到這個專案的通知提醒
事務卡片(issue)
發現bug需要討論
github說明圖


在這裡插入圖片描述
搭建個人網站
點選new repository,名稱必須是使用者名稱+github.io
在這裡插入圖片描述
建立一個index.html檔案,即可有個人主頁
在這裡插入圖片描述
專案站點
https://使用者名稱.github.io/倉庫名
在這裡插入圖片描述

Git

Git Repository(Git倉庫)(提交區)
最終確定的檔案儲存到倉庫,成為一個新版本,並對別人可見
暫存區
暫存已經修改的檔案最後統一提交到git倉庫中
工作區(工作目錄)
新增、編輯、修改檔案等動作
在這裡插入圖片描述
基本資訊設定
在這裡插入圖片描述
git config --list檢視所有配置資訊
初始化倉庫
git init ——生成.git檔案
向倉庫中新增檔案
touch a1.java——建立一個檔案
git add a1.java——新增檔案到暫存區,新增所有檔案git add .
git commit -m ‘add a1.java’——提交檔案到倉庫
配置忽略檔案


如果呼叫 git add .則會新增所有檔案,可以配置.gitignore配忽略匹配檔案
在這裡插入圖片描述
修改倉庫
vi a1.java——修改檔案
cat a1.java——檢視檔案
git status——檢視狀態
git add a1.java——修改檔案到暫存區
git commit -m ‘提交修改的專案’——提交到倉庫
刪除檔案
git rm --cached——僅從暫存區刪除
git rm a1.java——從暫存區與工作目錄中刪除檔案
git commit -m ‘通過git刪除倉庫檔案’——提交
檢視歷史資訊
git log——檢視提交資訊
git log --online——簡化資訊
顯示版本差異

git diff
將檔案內容從暫存區複製到工作目錄
git checkout – file
在這裡插入圖片描述
撤銷暫存區內容
在這裡插入圖片描述
撤銷全部改動
在這裡插入圖片描述
總結一下
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
Git克隆操作
將遠端倉庫中的專案複製到本地
git clone 倉庫地址 —— 倉庫地址

克隆之後同樣是add到暫存,然後commit提交到倉庫,最後push到遠端倉庫:

Git推送
git push
在這裡插入圖片描述

實際專案開發中分支的概念和用法

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
如果線上發現bug,則建立hotfix分支進行修復,併合並回development分支
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

分支操作

在這裡插入圖片描述
git checkout 分支切換
在這裡插入圖片描述
在這裡插入圖片描述
假設場景下的各步命令(連續的步驟,關鍵看head在誰的上面,箭頭是指標):
在這裡插入圖片描述
注意下圖git commit是從c4006ec到5751363
在這裡插入圖片描述
回到master分支
在這裡插入圖片描述
在這裡插入圖片描述
*是當前所屬分支
在這裡插入圖片描述
在這裡插入圖片描述
此時分支沒有任何變化
在這裡插入圖片描述
git reset 回退分支
在這裡插入圖片描述
git reset --mixed e39d0b3,該命令會將資料恢復到暫存區
在這裡插入圖片描述
git reset --hard e39d0b3,該命令會將資料恢復到暫存區和工作區
在這裡插入圖片描述
git reset --soft e39d0b3,該命令會將資料恢復到暫存區和工作區,那1f2f476分支就丟失了
在這裡插入圖片描述
每次使用分支的hash號很麻煩,可以使用捷徑:
在這裡插入圖片描述
reset和checkout區別
需要注意的是,前面提到的分支操作都是commit操作,而reset和checkout還可以對檔案進行file操作
在這裡插入圖片描述
注意第三列,是否移動HEAD或branch。file操作是都不會移動HEAD和branch的。
在這裡插入圖片描述
checkout是不會改變分支的,只會對HEAD進行移動。在file操作中,reset修改的是暫存區,checkout修改的是工作目錄。
在這裡插入圖片描述
checkout會遇到當前工作目錄還未提交,無法切換分支的error,因此需要stash
git stash
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
從stash中刪除用stash drop
在這裡插入圖片描述
git merge 合併分支
當前場景,最終提交節點為c4fe238
在這裡插入圖片描述
通過下面命令可以看到merge後的分支關係
在這裡插入圖片描述
merge會產生衝突,例如下圖是test.md
在這裡插入圖片描述
並不是每個merge都會有衝突,下圖就不會有衝突
在這裡插入圖片描述
通過下面合併可以發現是一個線性合併
在這裡插入圖片描述
但是我們不希望這樣(不希望fast forward快速向前合併),我們希望知道在哪裡merge了master分支,新增–no-ff引數
在這裡插入圖片描述
這樣就跟普通的merge相同了
在這裡插入圖片描述
git rebase
在這裡插入圖片描述
注意這張變基後的圖
在這裡插入圖片描述
例如以下場景
在這裡插入圖片描述
首先rebasehi找到以下三個節點
在這裡插入圖片描述
之後rebase會找到共同節點c400和兩個分支節點c4f和042之間的提交記錄,讓這個提交在master分支上重演!
在這裡插入圖片描述
注意下面HEAD和feature分支的變化
在這裡插入圖片描述
這樣提交的歷史就變成線性,因為feature分支上的每一步都是線性的和master合併,從而得到最終的feature分支
還可以選擇feature分支中的單獨一個部分重演,例如讓575以後分支在master上重演
在這裡插入圖片描述
這樣紅色的575就被拋棄
在這裡插入圖片描述
rebase和merge區別,merge可以很清楚的看到分支的合併情況。
在這裡插入圖片描述
千萬不要在master分支上使用rebase
在這裡插入圖片描述
git tag
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

資料

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述