原文連接:Git和Github簡單教程html
網絡上關於Git和GitHub的教程很多,可是這些教程有的命令太少不夠用,有的命令太多,使得初期學習的時候須要額外花很多時間在一些當前用不到的命令上。
這篇文章主要的目標是用較少的時間學習Git和GitHub的基本使用。在足夠通常使用的前提下,儘可能減小命令。
若是須要其餘命令,到時候再去其餘地方瞭解就好了。git
目錄:程序員
我纔不告訴你嘞github
v2.0
或者 1511
(表示發佈時爲15年11月),以下圖:全部命令前都要加 git
,如表中的init
是指 git init
。
點擊命令可直接跳轉至本文第一次使用的地方。
如下命令都在命令行裏執行。面試
行爲 | 命令 | 備註 |
---|---|---|
初始化 | init | 在本地的當前目錄裏初始化git倉庫 |
clone 地址 | 從網絡上某個地址拷貝倉庫(repository)到本地 | |
查看當前狀態 | status | 查看當前倉庫的狀態。碰到問題不知道怎麼辦的時候,能夠經過看它給出的提示來解決問題。這個命令執行的頻率應該是其餘命令的幾倍,特別是新手 |
查看不一樣 | diff | 查看當前狀態和最新的commit之間不一樣的地方 |
diff 版本號1 版本號2 | 查看兩個指定的版本之間不一樣的地方。這裏的版本號指的是commit的hash值 | |
添加文件 | add -A | 這算是至關通用的了。在commit以前要先add |
撤回修改的且還未stage的內容 | checkout -- . | 這裏用小數點表示撤回全部修改,在-- 的先後都有空格 |
提交 | commit -m "提交信息" | 提交信息最好能體現更改了什麼 |
刪除未tracked | clean -xf | 刪除當前目錄下全部沒有track過的文件。無論它是不是.gitignore文件裏面指定的文件夾和文件 |
查看提交記錄 | log | 查看當前版本及以前的commit記錄 |
reflog | HEAD的變動記錄 | |
版本回退 | reset --hard 版本號 | 回退到指定版本號的版本,該版本以後的修改都被刪除。同時也是經過這個命令回到最新版本。須要reflog配合 |
行爲 | 命令 | 備註 |
---|---|---|
設置用戶名 | config --global user.name "你的用戶名" | |
設置郵箱 | config --global user.email "你的郵箱" | |
生成ssh key | ssh-keygen -t rsa -C "你的郵箱" | 這條命令前面不用加git |
添加遠程倉庫 | remote add origin 你複製的地址 | 設置origin |
上傳並指定默認 | push -u origin master | 指定origin爲默認主機,之後push默認上傳到origin上 |
提交到遠程倉庫 | push | 將當前分支增長的commit提交到遠程倉庫 |
從遠程倉庫同步 | pull | 在本地版本低於遠程倉庫版本的時候,獲取遠程倉庫的commit |
能夠用一張圖直觀地看出以上主要的命令對倉庫的影響。
圖片引用自:Git introduction for CVS/SVN/TFS userssql
圖片引用自:工做區和暫存區 - 廖雪峯的官方網站 (作了點修改)小程序
對照查看兩張圖:windows
Git for Windows(又msysgit)緩存
安裝包能夠到官方網站[1]
下載,或者在github[2]
下載。若是下載不下來,能夠把連接複製下來用迅雷下載。若是用迅雷下載不放心,在下載完後去在github下載的那個地方查看SHA-256值,並和下載的文件對比,若是值同樣就能夠放心使用。網絡
安裝的時候一路點擊Next
就好了。
Git for Windows從2.8.0版本
[3]
開始,默認添加環境變量,因此環境變量部分就不用再手動配置了。(這句能夠無視)
這裏先不引入Github,而是在本地計算機上的操做。
打開命令行(cmd)或者在想要建立repository的地方右鍵鼠標並點擊 Git Bash Here
打開窗口。
它會建立一個隱藏的文件夾 .git
這裏不去管它是用來幹嗎的。關閉windows的顯示隱藏的項目
吧。
我在這個文件夾裏面建立了一個 today.txt
的文件。而且不要臉地祝本身兒童節快樂:
它告訴我有一個還未追蹤的文件,並提示我可使用 git add <file>...
把它加進去。
可是我並不打算把全部命令都介紹一遍,因此我選擇使用上面概覽時所提到的 git add -A
命令。
嗯,什麼提示都沒有。不要緊,咱們再次使用 git status
:
狀態變了!說明add成功。再看看它的提示 Changes to be committed
,也就是說如今能夠執行commit了。下面一行則告訴你如何將文件從stage裏移出,這裏無論。
執行 git commit -m "提交信息"
將文件提交到repository裏。提交信息用英文的雙引號括起來。
這樣第一步就完成了。
也許你會奇怪:爲何要有一個add,直接commit不就好了?這是由於stage有不少用處,具體能夠去查找相關資料。這裏就算不了解問題也不大。
接着我修改文件內容。改爲祝你們兒童節快樂好了 (~ ̄▽ ̄)~
咱們用 git status
看看有什麼變化:
這和以前的提示不同了。以前是這個:
比較一下就會看到,以前的是添加新文件,當時文件還沒被追蹤(untracked),而此次是更改已經追蹤(tracked)的文件。
如今咱們經過git看看文件作了哪些變化,執行 git diff
:
它默認跟最新的一個commit進行比較。
紅色(前面有減號-
)表示刪除,綠色(前面有加號+
)表示添加。
所以,在git看來,咱們是刪除了原來那一行,並添加了新的兩行。這在文件內容特別多的時候效果比較明顯。
這個命令在如下狀況可使用:
注:若是你用 windows 建立 txt 文件,並用自帶文本編輯器來編輯文本,獲得的編碼是 GBK 。而 Git 讀取文件時,使用 UTF-8 無 ROM 編碼。所以會出現中文沒法正常顯示的狀況。
假如我如今想撤銷這些更改,執行 git checkout -- .
就好了:
恩,仍然沒有任何提示。執行 git status
看看:
上一個status的提示已經不見咯。再來看看文件:
果真復原了!那麼再次進行修改:
接着:git add -A
git commit -m "將[本身]改成[米娜桑]"
用 git log
看看提交(commit)記錄:
嗯。如今有兩個提交了。
若是我寫的是一篇很長的文章,而且在以前的版本基礎上修改了一部份內容,生成一個新的commit,如今我發現我在修改的時候刪掉了一部份內容,而這部份內容是我如今須要用到的,怎麼辦?版本回退!
仍是以剛纔的文件爲例,如今我試着將文件回退到第一個commit時的狀態。但在這以前,咱們看看這個文件夾裏面的東西:
.git
文件夾由於原本就是隱藏的,我在關了 顯示隱藏的項目
的選項後,它就不顯示了。
如今看到的是隻有一個文件,並且是最新的一個版本。
文件的修改日期爲
2016\6\1 21:52
從剛纔的 git log
:
咱們看到兩行黃色部分是以 commit
開頭的,後面接着一串字符。這一串字符是16進制的數,是一串哈希值。咱們叫它版本號就好了。
開始回退,執行 git reset --hard 1df0573
(取版本號前7位就能夠了):
這裏提示HEAD已經更改指向至1df0573了。此時文件:
其內容:
已經回到個人第一個版本的狀態。
這裏文件的修改日期被更改成我如今的時間
2016\6\2 19:29
這是因爲文件的修改日期是由windows修改的,由於它檢測到這個文件被修改了。而咱們剛纔從最新版本回退到如今這個版本,就像是咱們手動修改了文件內容同樣,事實上是由git來完成的。
其實能夠無論上面這一段
如今再執行 git log
:
新版本的commit記錄不見了!這就是 reset --hard 的力量,很好很強硬!
如今已經看到了以前版本的內容,那麼如何回到最新版呢?
先執行 git reflog
:
能夠看到HEAD的變化狀況。
第一行表示當前HEAD所在的版本號是 1df0573
,而之因此在這個版本號,是因爲咱們執行了reset命令。
看第二行,它告訴咱們,這個HEAD所在的版本號是 ad93b89
,這個版本號是在執行commit以後造成的。
此時我再用一次reset,將HEAD指向 ad93b89
, 同時查看log :
git reset --hard ad93b89 git log
回到第一次reset前的狀態了!
一般在reset或者pull(後面會講)以前要作兩件事:
還原已作修改的tracked文件,上面已經講過。
如今看看如何用命令刪除新加的文件。
首先我手動建立個文件,用來演示:
用checkout是沒辦法刪除掉它的,使用 git clean -xf
:
這個命令的殺傷力比較大,它刪除當前目錄下全部沒有track過的文件。無論它是不是.gitignore文件裏面指定的文件夾和文件。固然,也有殺傷力比較小的,但這裏就不介紹了。
若是你的文件名是中文的,在使用git status
時會亂碼。以下圖所示:
若是要使它顯示爲中文,在命令行裏執行:git config --global core.quotepath false
。
再使用 git status
:
若是 git log
也會亂碼,執行如下命令:
git config --global i18n.commitencoding utf-8 git config --global i18n.logoutputencoding utf-8
請根據須要將後面的 utf-8 替換成你想要的編碼。若是是團隊項目,請確保全部成員的設置都一致。
上面的操做都是在本地計算機上產生影響的,通常也夠用了。
若是你是程序員,想和其餘人分享你的代碼,或者合做開發,能夠用Github。
到Github[4]
註冊帳號。
ssh-keygen -t rsa -C "你的郵箱"
,它會有三次等待你輸入,直接回車便可。clip < ~/.ssh/id_rsa.pub
(或者到上圖提示的路徑裏去打開文件並複製):打開Github,進入Settings:
點擊左邊的 SSH and GPG keys
,將ssh key粘貼到右邊的Key裏面。Title隨便命名便可。
點擊下面的 Add SSH key
就添加成功了。
測試一下吧,執行 ssh -T git@github.com
:
嗯,這樣就成功了!
ssh -T git@git.oschina.net
ssh -T git@git.coding.net
建立遠程倉庫
首先是在右上角點擊進入建立界面:
接着輸入遠程倉庫名:
點擊 Create repository
就建立好了。其餘選項能夠暫時無論。
將遠程倉庫和本地倉庫關聯起來
先到Github上覆制遠程倉庫的SSH地址:
有兩種方式能夠關聯,一種是SSH,一種是HTTPS。因爲HTTPS比較慢,因此推薦使用SSH。
注意SSH的地址格式是這樣開頭的: git@github.com
運行 git remote add origin 你複製的地址
:
若是你在建立 repository 的時候,加入了 README.md 或者 LICENSE ,那麼 github 會拒絕你的 push 。你須要先執行 git pull origin master
。
關聯已經完成!
之後想在commit後同步到Github上,只要直接執行 git push
就行啦:
能夠在Github上看到修改:
關於團隊合做開發,我在以前已經專門用一篇文章來講明瞭。
原文連接: GitHub團隊項目合做流程
上文的目錄:
其中 零、1、七
是由團隊項目負責人來完成的。
看到別人的代碼,想要獲取到本地計算機慢慢研究或者修改,能夠用Git將其下載下來。
以我和一位同窗合做的倉庫爲例,連接:schaepher/blogsbackup
這是咱們用來備份博客園博客的一個小程序,主要用於助教備份學生的博客。
有一點要注意:這樣直接clone別人的倉庫後,不能push上本身的修改。
在知道了clone以後,你就能夠更簡單的建立並關聯一個空倉庫了。
這樣能夠不用再作關聯了。省去了上面的 init
和 git remote add origin
以及 git push -u origin master
。
這篇文章基本只介紹主線操做,而在操做過程當中,可能有誤操做或者其餘問題。我把這些問題集中放在另外一篇博客裏面(這裏列出目錄)。這樣這篇文章不會顯得太長。