學習git,github
學習廖神GIT教程總結:
一、操作前工作
1、安裝GIT
ubuntu上,可用git命令試一下。
sudo apt-get install git
二、操作版本庫
1、版本庫(repository)
可以理解為倉庫,實質上是一個目錄,被git管理起來。
建立命令:git init
$ mkdir learngit
$ cd learngit
$ pwd
/Users/michael/learngit
$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/
瞬間Git就把倉庫建好了,而且告訴你是一個空的倉庫(empty Git repository),當前目錄下多了一個.git的目錄,這是用來跟蹤管理版本庫的。
如果你沒有看到.git目錄,那是因為這個目錄預設是隱藏的,用ls -ah命令就可以看見。
2、新增檔案
在learngit資料夾下加入檔案,比如readme.txt
然後用git add命令新增進倉庫快取
$ git add readme.txt
git add -A把目錄中所有的檔案資訊新增到索引庫的暫存區裡面去
3、提交到版本庫
$ git commit -m "wrote a readme file"
[master (root-commit) eaadf4e] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
儘可能的寫註釋
4、總結:
- 初始化一個Git倉庫,使用git init命令。
- 新增檔案到Git倉庫,分兩步: 使用命令git add ,可反覆多次使用,新增多個檔案;
- 使用命令git commit -m ,完成。
三、遠端版本庫Github.com
1、註冊 github.com
2、建立SSH KEY
在使用者主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個檔案,如果已經有了,可直接跳到下一步。如果沒有,開啟Shell(Windows下開啟Git Bash),建立SSH Key:
$ ssh-keygen -t rsa -C " [email protected]"
你需要把郵件地址換成你自己的郵件地址,然後一路回車,使用預設值即可,由於這個Key也不是用於軍事目的,所以也無需設定密碼。
如果一切順利的話,可以在使用者主目錄裡找到.ssh目錄,裡面有id_rsa和id_rsa.pub兩個檔案,這兩個就是SSH
Key的祕鑰對,id_rsa是私鑰,不能洩露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。
3、登入Github開啟Account settings,SSH Keys
點選Add SSH Key,title可任意,Key文字框黏貼id_rsa.pub檔案內容
4、Github上建立倉庫
初始化新增README不勾選
,把本地倉庫與之關聯,內容推送至Github倉庫。
$ git remote add origin [email protected]:michaelliao/learngit.git
5、本地倉庫內容推送至Github遠端倉庫
$ git push -u origin master
Counting objects: 20, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (20/20), 1.64 KiB | 560.00 KiB/s, done.
Total 20 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:michaelliao/learngit.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,Git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
成功之後在Github頁面中可見遠端庫內容與本地一模一樣。
6、提交
從現在起,本地提交完通過命令:
$ git push origin master
都可以推送至Github
7、遠端庫克隆
上次我們講了先有本地庫,後有遠端庫的時候,如何關聯遠端庫。
現在,假設我們從零開發,那麼最好的方式是先建立遠端庫,然後,從遠端庫克隆。
首先,登陸GitHub,建立一個新的倉庫,名字叫gitskills:
勾選README。
克隆命令:
$ git clone [email protected]:michaelliao/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.
四、更新本地版本庫
git 使用之 更新本地倉庫 git
當你要提交的遠端git倉庫及分支被別人更新了時候,要想提交自己的更新,先要同步別人的更新到本地:
Git中從遠端的分支獲取最新的版本到本地有這樣2個命令:
-
git fetch:相當於是從遠端獲取最新版本到本地,不會自動merge
git fetch origin master
git log -p master…origin/master
git merge origin/master
含義:
首先從遠端的origin的master主分支下載最新的版本到origin/master分支上
然後比較本地的master分支和origin/master分支的差別
最後進行合併
- git pull:相當於是從遠端獲取最新版本並merge到本地
git pull origin master
上述命令其實相當於git fetch 和 git merge
在實際使用中,git fetch更安全一些
因為在merge前,我們可以檢視更新情況,然後再決定是否合併
參考:http://blog.csdn.net/hudashi/article/details/7664457
五、Git操作命令
1、檢視當前倉庫狀態:
$ git status
2、檢視對比上一次修改內容:
$ git diff readme.txt
3、比如readme.txt有三個版本,檢視:
$ git log
$ git log --pretty=oneline
$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file
一大串字元數字為版本號(commit id)
4、退回上一個版本
$ git reset --hard HEAD^
5、從新回到第三個版本
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
1094a是第三版ID。只需要寫一部分即可。
6、如果不知道版本號,可用命令檢視:
$ git reflog
6、修改
(1)丟棄工作區的修改:
$ 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 checkout -- readme.txt(還原操作,如果誤刪了也可以還原)
(2)丟棄暫緩區的修改
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: readme.txt
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
此時已經從暫緩區回到工作區,然後命令:
$ git checkout -- readme.txt
此時工作區也還原了。
總結:
場景1:當你改亂了工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout – file。
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD
,就回到了場景1,第二步按場景1操作。場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。