Git的基本使用命令

Git的使用心得

由于公司對(duì)我的代碼管理不嚴(yán)謹(jǐn),所以荒廢了好久的Git,一直就沒怎么用,后面也多忘光了,所以再次重新梳理了下Git的使用,主要是從一個(gè)iOS開發(fā)者的角度去整理的(其實(shí)其他的也都差不多,只是MAC的環(huán)境差異罷了,Windows下的貌似不太好搞),這里會(huì)羅列一些常用的命令,方便以后自己查找,如果有不對(duì)的地方,望請(qǐng)各位大神指教。

本文中的命令指示基本的常用命令,想要系統(tǒng)的學(xué)習(xí)的,可以參照廖雪峰大大的文章,個(gè)人覺得應(yīng)該可以說是最最完整、易懂的中文Git教程,非常完整。

一、Git的安裝

在Linux上安裝Git,首先,你可以試著輸入git,看看系統(tǒng)有沒有安裝Git:
$ git
The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

像上面的命令,有很多Linux會(huì)友好地告訴你Git沒有安裝,還會(huì)告訴你如何安裝Git。
如果你碰巧用Debian或Ubuntu Linux,通過一條sudo apt-get install git就可以直接完成Git的安裝,非常簡(jiǎn)單。
老一點(diǎn)的Debian或Ubuntu Linux,要把命令改為sudo apt-get install git-core,因?yàn)橐郧坝袀€(gè)軟件也叫GIT(GNU Interactive Tools),結(jié)果Git就只能叫git-core了。由于Git名氣實(shí)在太大,后來就把GNU Interactive Tools改成gnuitgit-core正式改為git
如果是其他Linux版本,可以直接通過源碼安裝。先從Git官網(wǎng)下載源碼,然后解壓,依次輸入:./configmakesudo make install這幾個(gè)命令安裝就好了。

在Mac OS X上安裝Git

如果你正在使用Mac做開發(fā),有兩種安裝Git的方法。
一是安裝homebrew,然后通過homebrew安裝Git,具體方法請(qǐng)參考homebrew的文檔:http://brew.sh/
第二種方法更簡(jiǎn)單,也是推薦的方法,就是直接從AppStore安裝Xcode,Xcode集成了Git,不過默認(rèn)沒有安裝,你需要運(yùn)行Xcode,選擇菜單Xcode->Preferences,在彈出窗口中找到Downloads,選擇Command Line Tools,點(diǎn)Install就可以完成安裝了。

Xcode是Apple官方IDE,功能非常強(qiáng)大,是開發(fā)Mac和iOS App的必選裝備,而且是免費(fèi)的!

安裝完成后,還需要最后一步設(shè)置,在命令行輸入:

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

("Your Name""email@example.com"請(qǐng)換成您自己的信息,別亂填,不然忘了也不好 )

因?yàn)镚it是分布式版本控制系統(tǒng),所以,每個(gè)機(jī)器都必須自報(bào)家門:你的名字和Email地址。你也許會(huì)擔(dān)心,如果有人故意冒充別人怎么辦?這個(gè)不必?fù)?dān)心,首先我們相信大家都是善良無知的群眾,其次,真的有冒充的也是有辦法可查的。

注意git config命令的--global參數(shù),用了這個(gè)參數(shù),表示你這臺(tái)機(jī)器上所有的Git倉庫都會(huì)使用這個(gè)配置,當(dāng)然也可以對(duì)某個(gè)倉庫指定不同的用戶名和Email地址。

二、創(chuàng)建版本庫

什么是版本庫呢?版本庫又名倉庫,英文名repository,你可以簡(jiǎn)單理解成一個(gè)目錄,這個(gè)目錄里面的所有文件都可以被Git管理起來,每個(gè)文件的修改、刪除,Git都能跟蹤,以便任何時(shí)刻都可以追蹤歷史,或者在將來某個(gè)時(shí)刻可以“還原”。
所以,創(chuàng)建一個(gè)版本庫非常簡(jiǎn)單:
首先,選擇一個(gè)合適的地方,創(chuàng)建一個(gè)空目錄:

$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit

pwd命令用于顯示當(dāng)前目錄。在我的Mac上,這個(gè)倉庫位于/Users/michael/learngit

第二步,通過git init命令把這個(gè)目錄變成Git可以管理的倉庫:

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

瞬間Git就把倉庫建好了,而且告訴你是一個(gè)空的倉庫(empty Git repository),細(xì)心的讀者可以發(fā)現(xiàn)當(dāng)前目錄下多了一個(gè).git的目錄,這個(gè)目錄是Git來跟蹤管理版本庫的,沒事千萬不要手動(dòng)修改這個(gè)目錄里面的文件,不然改亂了,就把Git倉庫給破壞了。
如果你沒有看到.git目錄,那是因?yàn)檫@個(gè)目錄默認(rèn)是隱藏的,用ls -ah命令就可以看見。

也不一定必須在空目錄下創(chuàng)建Git倉庫,選擇一個(gè)已經(jīng)有東西的目錄也是可以的。不過,不建議你使用自己正在開發(fā)的公司項(xiàng)目來學(xué)習(xí)Git,否則造成的一切后果概不負(fù)責(zé)。

現(xiàn)在我們編寫一個(gè)readme.txt文件,內(nèi)容如下:

Git is a version control system.
Git is free software.

一定要放到learngit目錄下(子目錄也行),因?yàn)檫@是一個(gè)Git倉庫,放到其他地方Git再厲害也找不到這個(gè)文件。
第一步,用命令git add告訴Git,把文件添加到倉庫:

$ git add readme.txt

第二步,用命令git commit告訴Git,把文件提交到倉庫:

$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
 1 file changed, 2 insertions(+)
 create mode 100644 readme.txt

簡(jiǎn)單解釋一下git commit命令,-m后面輸入的是本次提交的說明,可以輸入任意內(nèi)容,當(dāng)然最好是有意義的,這樣你就能從歷史記錄里方便地找到改動(dòng)記錄。

git commit命令執(zhí)行成功后會(huì)告訴你,1個(gè)文件被改動(dòng)(我們新添加的readme.txt文件),插入了兩行內(nèi)容(readme.txt有兩行內(nèi)容)。

為什么Git添加文件需要addcommit一共兩步呢?因?yàn)?code>commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."

三、時(shí)光穿梭

我們已經(jīng)成功地添加并提交了一個(gè)readme.txt文件,現(xiàn)在,是時(shí)候繼續(xù)工作了,于是,我們繼續(xù)修改readme.txt文件,改成如下內(nèi)容:

Git is a distributed version control system.
Git is free software.

現(xiàn)在,運(yùn)行git status命令看看結(jié)果:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

git status命令可以讓我們時(shí)刻掌握倉庫當(dāng)前的狀態(tài),上面的命令告訴我們,readme.txt被修改過了,但還沒有準(zhǔn)備提交的修改。
具體修改了什么內(nèi)容,需要用git diff這個(gè)命令看看:

$ git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
 Git is free software.

git diff顧名思義就是查看difference,顯示的格式正是Unix通用的diff格式,可以從上面的命令輸出看到,我們?cè)诘谝恍刑砑恿艘粋€(gè)distributed單詞。
知道了對(duì)readme.txt作了什么修改后,再把它提交到倉庫就放心多了,提交修改和提交新文件是一樣的兩步,第一步是git add

$ git add readme.txt

同樣沒有任何輸出。在執(zhí)行第二步git commit之前,我們?cè)龠\(yùn)行git status看看當(dāng)前倉庫的狀態(tài):

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   readme.txt
#

git status告訴我們,將要被提交的修改包括readme.txt,下一步,就可以放心地提交了:

$ git commit -m "add distributed"
[master ea34578] add distributed
 1 file changed, 1 insertion(+), 1 deletion(-)

提交后,我們?cè)儆?code>git status命令看看倉庫的當(dāng)前狀態(tài):

$ git status
# On branch master
nothing to commit (working directory clean)

Git告訴我們當(dāng)前沒有需要提交的修改,而且,工作目錄是干凈(working directory clean)的。

版本回退

現(xiàn)在,再練習(xí)一次,修改readme.txt文件如下:

Git is a distributed version control system.
Git is free software distributed under the GPL.

然后嘗試提交:

$ git add readme.txt
$ git commit -m "append GPL"
[master 3628164] append GPL
 1 file changed, 1 insertion(+), 1 deletion(-)

版本控制系統(tǒng)肯定有某個(gè)命令可以告訴我們歷史記錄,在Git中,我們用git log命令查看:

$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

git log命令顯示從最近到最遠(yuǎn)的提交日志,我們可以看到3次提交,最近的一次是append GPL,上一次是add distributed,最早的一次是wrote a readme file
如果嫌輸出信息太多,看得眼花繚亂的,可以試試加上--pretty=oneline參數(shù):

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

好了,現(xiàn)在我們準(zhǔn)備把readme.txt回退到上一個(gè)版本,也就是“add distributed”的那個(gè)版本,怎么做呢?
首先,Git必須知道當(dāng)前版本是哪個(gè)版本,在Git中,用HEAD表示當(dāng)前版本,也就是最新的提交3628164...882e1e0(注意我的提交ID和你的肯定不一樣),上一個(gè)版本就是HEAD^,上上一個(gè)版本就是HEAD^^,當(dāng)然往上100個(gè)版本寫100個(gè)^比較容易數(shù)不過來,所以寫成HEAD~100
現(xiàn)在,我們要把當(dāng)前版本append GPL回退到上一個(gè)版本add distributed,就可以使用git reset命令:

$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed

看看readme.txt的內(nèi)容是不是版本add distributed

$ cat readme.txt
Git is a distributed version control system.
Git is free software.

果然。

還可以繼續(xù)回退到上一個(gè)版本wrote a readme file,不過且慢,然我們用git log再看看現(xiàn)在版本庫的狀態(tài):

$ git log
commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

最新的那個(gè)版本append GPL已經(jīng)看不到了!想再回去已經(jīng)回不去了,腫么辦?辦法其實(shí)還是有的,只要上面的命令行窗口還沒有被關(guān)掉,你就可以順著往上找啊找啊,找到那個(gè)append GPLcommit id3628164...,于是就可以指定回到未來的某個(gè)版本:

$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

版本號(hào)沒必要寫全,前幾位就可以了,Git會(huì)自動(dòng)去找。當(dāng)然也不能只寫前一兩位,因?yàn)镚it可能會(huì)找到多個(gè)版本號(hào),就無法確定是哪一個(gè)了。

再小心翼翼地看看readme.txt的內(nèi)容:

$ cat readme.txt
Git is a distributed version control system.
Git is free software distributed under the GPL.

現(xiàn)在,你回退到了某個(gè)版本,關(guān)掉了電腦,第二天早上就后悔了,想恢復(fù)到新版本怎么辦?找不到新版本的commit id怎么辦?
在Git中,總是有后悔藥可以吃的。當(dāng)你用$ git reset --hard HEAD^回退到add distributed版本時(shí),再想恢復(fù)到append GPL,就必須找到append GPLcommit id。Git提供了一個(gè)命令git reflog用來記錄你的每一次命令:

$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

終于舒了口氣,第二行顯示append GPLcommit id3628164,現(xiàn)在,你又可以回去了。

git diff HEAD -- readme.txt命令可以查看工作區(qū)和版本庫里面最新版本的區(qū)別:

$ git diff HEAD -- readme.txt 
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
 Git is a distributed version control system.
 Git is free software distributed under the GPL.
 Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
撤銷修改

git checkout -- file可以丟棄工作區(qū)的修改:

$ git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區(qū)的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區(qū),現(xiàn)在,撤銷修改就回到和版本庫一模一樣的狀態(tài);
一種是readme.txt已經(jīng)添加到暫存區(qū)后,又作了修改,現(xiàn)在,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)。
總之,就是讓這個(gè)文件回到最近一次git commitgit add時(shí)的狀態(tài)。

Git同樣告訴我們,用命令git reset HEAD file可以把暫存區(qū)的修改撤銷掉(unstage),重新放回工作區(qū):

$ git reset HEAD readme.txt
Unstaged changes after reset:
M       readme.txt

git reset命令既可以回退版本,也可以把暫存區(qū)的修改回退到工作區(qū)。當(dāng)我們用HEAD時(shí),表示最新的版本。
再用git status查看一下,現(xiàn)在暫存區(qū)是干凈的,工作區(qū)有修改:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

還記得如何丟棄工作區(qū)的修改嗎?

$ git checkout -- readme.txt

$ git status
# On branch master
nothing to commit (working directory clean)
刪除操作

在Git中,刪除也是一個(gè)修改操作,我們實(shí)戰(zhàn)一下,先添加一個(gè)新文件test.txt到Git并且提交:

$ git add test.txt
$ git commit -m "add test.txt"
[master 94cdc44] add test.txt
 1 file changed, 1 insertion(+)
 create mode 100644 test.txt

一般情況下,你通常直接在文件管理器中把沒用的文件刪了,或者用rm命令刪了:

$ rm test.txt

這個(gè)時(shí)候,Git知道你刪除了文件,因此,工作區(qū)和版本庫就不一致了,git status命令會(huì)立刻告訴你哪些文件被刪除了:

$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       deleted:    test.txt
#
no changes added to commit (use "git add" and/or "git commit -a")

現(xiàn)在你有兩個(gè)選擇,一是確實(shí)要從版本庫中刪除該文件,那就用命令git rm刪掉,并且git commit

$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
 1 file changed, 1 deletion(-)
 delete mode 100644 test.txt

現(xiàn)在,文件就從版本庫中被刪除了。
另一種情況是刪錯(cuò)了,因?yàn)榘姹編炖镞€有呢,所以可以很輕松地把誤刪的文件恢復(fù)到最新版本:

$ git checkout -- test.txt

git checkout其實(shí)是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”。

命令git rm用于刪除一個(gè)文件。如果一個(gè)文件已經(jīng)被提交到版本庫,那么你永遠(yuǎn)不用擔(dān)心誤刪,但是要小心,你只能恢復(fù)文件到最新版本,你會(huì)丟失最近一次提交后你修改的內(nèi)容。

四、遠(yuǎn)程倉庫

添加遠(yuǎn)程倉庫

我們可以自己搭建一臺(tái)運(yùn)行Git的服務(wù)器,不過現(xiàn)階段,為了學(xué)Git先搭個(gè)服務(wù)器絕對(duì)是小題大作。好在這個(gè)世界上有個(gè)叫GitHub的神奇的網(wǎng)站,從名字就可以看出,這個(gè)網(wǎng)站就是提供Git倉庫托管服務(wù)的,所以,只要注冊(cè)一個(gè)GitHub賬號(hào),就可以免費(fèi)獲得Git遠(yuǎn)程倉庫。

在繼續(xù)閱讀后續(xù)內(nèi)容前,請(qǐng)自行注冊(cè)GitHub賬號(hào)。由于你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以,需要一點(diǎn)設(shè)置:

第1步:創(chuàng)建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個(gè)目錄下有沒有id_rsa和id_rsa.pub這兩個(gè)文件,如果已經(jīng)有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創(chuàng)建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"

你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認(rèn)值即可,由于這個(gè)Key也不是用于軍事目的,所以也無需設(shè)置密碼。

如果一切順利的話,可以在用戶主目錄里找到.ssh目錄(切換回主目錄命令cd ~),ls -ah查看里面有id_rsaid_rsa.pub兩個(gè)文件,這兩個(gè)就是SSH Key的秘鑰對(duì),id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

第2步:登陸GitHub,打開Account settingsSSH Keys頁面,然后,點(diǎn)Add SSH Key,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內(nèi)容(cat id_rsa.pub命令):

舊版Github的界面,現(xiàn)在有所更新,不過細(xì)心找下還是能找到設(shè)置的地方

點(diǎn)“Add Key”,你就應(yīng)該看到已經(jīng)添加的Key:


添加Key

為什么GitHub需要SSH Key呢?因?yàn)镚itHub需要識(shí)別出你推送的提交確實(shí)是你推送的,而不是別人冒充的,而Git支持SSH協(xié)議,所以,GitHub只要知道了你的公鑰,就可以確認(rèn)只有你自己才能推送。

當(dāng)然,GitHub允許你添加多個(gè)Key。假定你有若干電腦,你一會(huì)兒在公司提交,一會(huì)兒在家里提交,只要把<u>每臺(tái)電腦的Key都添加到GitHub</u>,就可以在每臺(tái)電腦上往GitHub推送了。

最后友情提示,在GitHub上<u>免費(fèi)托管</u>的Git倉庫,<u>任何人</u>都可以看到喔(但只有你自己才能改)。所以,<u>不要把敏感信息放進(jìn)去</u>。

如果你不想讓別人看到Git庫,有三個(gè)辦法,一個(gè)是交點(diǎn)保護(hù)費(fèi),讓GitHub把公開的倉庫變成私有的,這樣別人就看不見了(不可讀更不可寫)。第二個(gè)辦法是自己動(dòng)手,搭一個(gè)Git服務(wù)器,因?yàn)槭悄阕约旱腉it服務(wù)器,所以別人也是看不見的。這個(gè)方法我們后面會(huì)講到的,相當(dāng)簡(jiǎn)單,公司內(nèi)部開發(fā)必備。第三個(gè)辦法,就是換一個(gè)托管,用碼云托管,在創(chuàng)建項(xiàng)目的時(shí)候,把項(xiàng)目屬性設(shè)為私有即可,也很簡(jiǎn)單,但是不推薦把公司項(xiàng)目放上去,畢竟不是自己的東西,所以<u>公司開發(fā),最好最好還是要自己搭建一個(gè)Git服務(wù)器</u>,如果把公司項(xiàng)目放上去之后造成的一切結(jié)果概不負(fù)責(zé)。

現(xiàn)在的情景是,你已經(jīng)在本地創(chuàng)建了一個(gè)Git倉庫后,又想在GitHub創(chuàng)建一個(gè)Git倉庫,并且讓這兩個(gè)倉庫進(jìn)行遠(yuǎn)程同步,這樣,GitHub上的倉庫既可以作為備份,又可以讓其他人通過該倉庫來協(xié)作,真是一舉多得。

首先,登陸GitHub,然后,在右上角找到Create a new repo按鈕,創(chuàng)建一個(gè)新的倉庫:


在Repository name填入learngit,其他保持默認(rèn)設(shè)置,點(diǎn)擊Create repository按鈕,就成功地創(chuàng)建了一個(gè)新的Git倉庫:

目前,在GitHub上的這個(gè)learngit倉庫還是空的,GitHub告訴我們,可以從這個(gè)倉庫克隆出新的倉庫,也可以把一個(gè)已有的本地倉庫與之關(guān)聯(lián),然后,把本地倉庫的內(nèi)容推送到GitHub倉庫。

現(xiàn)在,我們根據(jù)GitHub的提示,在<u>本地</u>的learngit倉庫下運(yùn)行命令:

$ git remote add origin git@github.com:michaelliao/learngit.git

請(qǐng)千萬注意,把上面的michaelliao替換成你自己的GitHub賬戶名,否則,你在本地關(guān)聯(lián)的就是我的遠(yuǎn)程庫,關(guān)聯(lián)沒有問題,但是你以后推送是推不上去的,因?yàn)槟愕腟SH Key公鑰不在我的賬戶列表中。

添加后,遠(yuǎn)程庫的名字就是origin,這是Git默認(rèn)的叫法,也可以改成別的,但是origin這個(gè)名字一看就知道是遠(yuǎn)程庫。

下一步,就可以把本地庫的所有內(nèi)容推送到遠(yuǎn)程庫上:

$ git push -u origin master
Counting objects: 19, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (19/19), done.
Writing objects: 100% (19/19), 13.73 KiB, done.
Total 23 (delta 6), reused 0 (delta 0)
To git@github.com:michaelliao/learngit.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

把本地庫的內(nèi)容推送到遠(yuǎn)程,用git push命令,實(shí)際上是把當(dāng)前分支master推送到遠(yuǎn)程。

由于遠(yuǎn)程庫是空的,我們第一次推送master分支時(shí),加上了-u參數(shù),Git不但會(huì)把本地的master分支內(nèi)容推送的遠(yuǎn)程新的master分支,還會(huì)把本地的master分支和遠(yuǎn)程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時(shí)就可以簡(jiǎn)化命令。

推送成功后,可以立刻在GitHub頁面中看到遠(yuǎn)程庫的內(nèi)容已經(jīng)和本地一模一樣:



從現(xiàn)在起,只要本地作了提交,就可以通過命令:

$ git push origin master

把本地master分支的最新修改推送至GitHub,現(xiàn)在,你就擁有了真正的分布式版本庫!

從遠(yuǎn)程倉庫克隆

假設(shè)我們從零開發(fā),那么最好的方式是先創(chuàng)建遠(yuǎn)程庫,然后,從遠(yuǎn)程庫克隆。
首先,登陸GitHub,創(chuàng)建一個(gè)新的倉庫,名字叫gitskills


我們勾選Initialize this repository with a README,這樣GitHub會(huì)自動(dòng)為我們創(chuàng)建一個(gè)README.md文件。創(chuàng)建完畢后,可以看到README.md文件:

現(xiàn)在,遠(yuǎn)程庫已經(jīng)準(zhǔn)備好了,下一步是用命令git clone克隆一個(gè)本地庫:

$ git clone git@github.com:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

$ cd gitskills
$ ls
README.md

注意把Git庫的地址換成你自己的,然后進(jìn)入gitskills目錄看看,已經(jīng)有README.md文件了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評(píng)論 6 544
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,637評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評(píng)論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,629評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,976評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評(píng)論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,139評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,686評(píng)論 1 336
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,411評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,641評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評(píng)論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,820評(píng)論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評(píng)論 1 295
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,362評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,604評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容