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
資料