原文鏈接:點我
首先新司機接觸 Git 和 Github 可能會搞不清楚兩者之間的關系,這里稍微解釋一下:
1.Git是一款免費、開源的分布式版本控制系統
2.Github是用Git做版本控制的代碼托管平台
本地倉庫
主要介紹:
- 創建本地倉庫
- 查看當前項目狀態
- 倉庫狀態
- 添加
- 添加文件后倉庫當前狀態
- 提交(快照)
- 添加所有.txt類型文件並快照
- 查看日志
建立本地倉庫
(注意此處忽略選擇目錄,也就是說在現實操作中我們需要新建或跳轉到我們選擇的文件夾,來建立本地倉庫)
可以看到命令執行后在當前目錄下出現一個.git目錄,是Git用來跟蹤管理版本庫的。
查看當前項目狀態
創建完本地倉庫,先查看下當前項目狀態
可以看到現在是處於master分支,master分支都是最終版本的代碼,所以后面涉及到協同工作中其他分支merge到master分支概念,后再提。
倉庫狀態
1.3是添加和快照,這里我們可以看到Trygithub已經給我們創建好的一個txt文檔。這時候再執行git status查看此時創建一個txt后倉庫會有的狀態狀態。
這里我們看到,倉庫狀態顯示,一個沒有被跟蹤到的文件“octocat.txt”,並尚未提交。
添加
這里的git add命令是為了讓文件添加到Git暫存區,其實也就是讓git知道有個新文件添加進來了。
暫存區和工作區概念可參考 git工作區和暫存區
查看添加文件后倉庫當前狀態
這里可以看到倉庫當前狀態為
已經提交修改
新文件:octocat.txt
提交(快照)
這里commit有的地方叫提交,有的地方叫快照,但都是一個意思。
這里
1 git commit -m "你的注釋"
實際上操作是將暫存區的的文件提交到當前分支。
但簡單來說,也可以理解為我們每次對項目做修改時都需要有一個注釋(快照)。這樣使得我們在以后再看我們的項目時知道我們當時修改了什么東西。
添加所有.txt類型文件並快照
這里可以發現,只要是.txt格式的文件,無論是在octofamily目錄下還是根目錄下都被添加
查看日志
到目前為止已經執行了兩個git commit命令,此時我們想看一下我們已經有的所有快照,於是執行git log 命令。
到此為止,在本地倉庫所做的所有工作結束。
遠程倉庫
主要介紹:
- 鏈接遠程倉庫
- pull&push
- 差異
- 撤銷
- 分支操作
- 合並
- push
遠程倉庫
這里要做的是將你的本地倉庫與GitHub上遠程倉庫鏈接起來。
這個工作的主要意義是,將你的修改提交到遠程倉庫(pull),也可以將別人的修改從遠程倉庫拉到自己的本地倉庫里(push),以便共享。
但首先你要有個自己的GitHub賬號,並建好remote repository。
需注意,本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的。這里需要做:
- 打開終端(windows打開 Git bash),輸入 ssh-keygen -t rsa -C "你的郵件地址",一路回車,使用默認值即可。
- 跳轉到.ssh目錄
- 發現里面有id_rsa.pub和 id_rsa.pub文件。這兩個就是SSH Key的秘鑰對,其中id_rsa是私鑰,不能泄露。id_rsa.pub是公鑰,可以放心地告訴任何人。
- more id_rsa.pub,打開id_rsa.pub文件,復制。
- 登陸GitHub,找到Account settings-SSH Keys-Add SSH Key,Title隨便寫,文本框粘貼。(Key開頭為ssh-rsa)
這里進入你想要作為遠程倉庫的repository的界面,在
Clone or download得到你所要鏈接的遠程倉庫 URL。
在1.10中,它所提供的https://github.com/try-git/try_git.git 即為需要連接的遠程倉庫 URL。
pull & push
上傳本地倉庫內容至遠程
git push -u origin master
第一次推送master分支時,加上了-u參數,在以后的推送或者拉取時就可以簡化命令。
拉取遠程倉庫中別人的修改
git pull origin master
差異
查看在最后一次提交之后的所有變更git differ HEAD
查看添加(add)而並未提交(commit)的變更 git differ --staged
撤銷
此處詳細介紹了git reset 的使用
改變暫存區的快照,工作區無變化
git checkout -- file的使用
改變工作區的快照
分支操作
創建分支clean_up: git branch clean_up
跳轉分支clean_up:git checkout clean_up
此時可見on branch clean_up處於分支clean_up
刪除分支中所有.txt類型文件:git rm '*.txt'
此時可見下方目錄中所有*.txt類型文件都被刪除
在分支進行刪除操作依舊需要提交快照:git commit -m "Remove all the cats"
合並(merge)
跳轉回master分支,發現*.txt類型文件依舊存在:git branch master
執行合並,將在clean_up分支上的修改合並到master上:git merge clean_up
刪除分支clan_up:git branch -d clean_up
push
完成遠程倉庫中所git push