· git 官方文檔推薦 https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5
一、創(chuàng)建版本庫
1創(chuàng)建一個版本庫搀缠,
1.1
第一步選擇一個合適的地方捌浩,創(chuàng)建一個空目錄
$ mkdir learngit
$ cd learngit
$ pwd
代碼說明: mkdir 用于創(chuàng)建目錄
cd 切換工作目錄到指定目錄
pwd 用于顯示當前目錄路徑
1.2
第二步通過git init命令把這個目錄變成Git可以管理的倉庫:
$ git init
反饋為:
Initialized empty Git repository in /User/michael/learngit/.git
會告訴你這個一個空目錄甩恼,倉庫就建好了每瞒。
2把文件添加到版本庫
先編寫一個readme.rtf文件偶摔,內容如下:
Git is a version control system.
Git is free software.
2.1
第一步暇唾,用命令git add 告訴Git,把文件添加到倉庫
$ git add redme.rtf
執(zhí)行尚明的命令辰斋,沒有任何顯示就對的了
2.2
第二步策州,用命令git commit告訴Git,把文件提交到倉庫
$ git commit -m "wrote a readme file"
代碼說明:-m 后面輸入的是本次提交的說明亡呵,可以輸入任意內容
git commit 命令執(zhí)行成功會告訴你抽活,一個文件被改動,插入了行的內容
為什么Git添加文件需要add,commit兩步锰什?
因為commit可以一次提交很多文件下硕,所以可以多次add不同的文件
二、時光機穿梭
1.修改文件內容并上傳
我們已經成功并且添加了一個readme.rdf文件汁胆,修改文件內容梭姓。
現在,運行git status命令:
$ 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命令可以讓我們時刻掌握倉庫當前的狀態(tài)嫩码,上面的命令告訴我們誉尖,readme.rdf被修改過了,但還沒有準備提交的修改铸题。
$ git diff readme.rdf
反饋為:
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 铡恕,查看不同.我們可以看到我們在第一排添加了一個單詞。
知道了對文件做了什么修改后丢间,在提交到倉庫探熔,提交修改和提交新文件是一樣的兩步,第一步是git add:
$ git add readme.rdf
同樣沒有任何輸出烘挫。在執(zhí)行第二步git commit之前诀艰,我們在運行git status查看倉庫狀態(tài)
$ git status
git status告訴我們,將要被提交的修改包括readme.rdf饮六,下一步就可以放心提交了
$ git commit -m "add distributed"
就成功提交了
然后我們在使用git status命令查看倉庫的當前狀態(tài):
git status
反饋為:
# On branch master
nothing to commit (working directory clean)
Git告訴我們當前沒有需要提交的修改其垄,而且,工作目錄是干凈的(working directory clean)
2.版本回退
輸入代碼:
$ git log
反饋
commit 9b4e64a05be468ecaf4bedc1deb18b365079d72c (HEAD -> master)
Author: 趙航翊 <zhaohangyi@zhaohangyideMacBook-Pro.local>
Date: Wed Jul 18 11:35:44 2018 +0800
append GRL
commit cec15c8aaf4f1b83e60e4457bf91cbe64b49468a
Author: 趙航翊 <zhaohangyi@zhaohangyideMacBook-Pro.local>
Date: Wed Jul 18 09:19:26 2018 +0800
wrote a readme file
代碼說明:git log 命令顯示從最近到最遠的提交日志卤橄。如果嫌輸出信息太多绿满,加上參數--pretty=oneline
$ git log --pretty=oneline
9b4e64a05be468ecaf4bedc1deb18b365079d72c (HEAD -> master) append GRL
cec15c8aaf4f1b83e60e4457bf91cbe64b49468a wrote a readme file
代碼說明:前面的類似9b4e64a的是commit id (版本號)
退回上一個版本:
$ git reset --hard HEAD^
退回到指定版本:
$ git reset --hard (commit id)
commit id 不需要寫全,前幾位就行窟扑,Git會自動去尋找棒口。
$ git reflog
Git提供一個命令git reflog用來記錄每一次命令寄月。
穿梭前,用git log 命令查看提交歷史无牵,以便確定要回退到哪個版本
要重返未來,用git reflog查看命令歷史厂抖,以便確定要回到未來的哪個版本
部分Git命令總結
命令 | 作用 | 備注 |
---|---|---|
mkdir | 創(chuàng)建目錄 | |
cd | 切換工作目錄當指定目錄 | |
pwd | 顯示當前工作目錄路徑 | |
git init | 把當前目錄變成Git可以管理的倉庫 | |
git add | 把文件添加到倉庫 | |
git commit -m"" | 把文件提交到倉庫 | -m后面輸出的是本次提交的說明 |
git status | 查看倉庫當前的狀態(tài) | |
git diff | 查看修改的不同 | |
git log | 查看歷史記錄 | |
git log --pretty=oneline | 查看歷史記錄 | 簡化版 |
git reset --hard HEAD^ | 回退到上一個版本 | |
git reset --hard commit_id | 回退到指定版本 | |
cat | 打開指定文件 |
三 Git名詞解釋
1.工作區(qū):就是在電腦里能看到的目錄茎毁,比如說learngit文件夾就是一個工作區(qū)
2.版本庫:工作區(qū)有個隱藏目錄“.git”,這個不算工作區(qū)忱辅,而是Git的版本
Git的版本庫里存了很多東西七蜘,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個分子master墙懂,以及指向master的一個指針叫HEAD
前面講我們把文件往Git版本庫里添加的時候橡卤,是分兩步執(zhí)行的:
第一步用git add把文件添加進去,實際上就是把文件修改添加到暫存區(qū)
第二步用git commit 提交更改损搬,實際上就是把暫存區(qū)的所有內容提交到當前分支
可以簡單理解為:需要提交的文件修改通通放到暫存區(qū)碧库,然后,一次性提交暫存區(qū)的所有文件修改
四 撤銷修改
4.1未上傳到暫存區(qū)
命令:
$ git checkout --readme.rtf
代碼說明:撤銷在工作區(qū)的修改巧勤。
兩種情況嵌灰,一種是文件修改后還沒有上傳在暫存區(qū),
一種是修改過的文件已經上傳到暫存區(qū)區(qū)颅悉,又做了修改沽瞭,現在撤銷修改就回到添加到暫存區(qū)的暫態(tài)
4.2上傳到暫存區(qū)
命令
git reset HEAD readme.rtf
代碼說明:把暫存區(qū)的修改撤銷掉,重新放回工作區(qū)剩瓶。
git reset命令既可以回退版本驹溃,也可以把暫存區(qū)的修改回退到工作區(qū)。當我們使用HEAD時延曙,表示最新的版本豌鹤。
小結:
場景1:當你改亂了?工作區(qū)某個?文件的內容,想直接丟棄?工作區(qū)的修改時搂鲫,?用命令git checkout -- file傍药。
場景2:當你不但改亂了?工作區(qū)某個?文件的內容,還添加到了暫存區(qū)時魂仍,想丟棄修改拐辽,分兩步,第?一步?用命令git reset HEAD file擦酌,就回到了場景1俱诸,第?二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時赊舶,想要撤銷本次提交睁搭,參考版本回退?一節(jié)赶诊,不 過前提是沒有推送到遠程庫
五 刪除文件
在Git中,刪除也是一個修改操作园骆。一般情況下舔痪,用rm命令刪除:
rm test.rtf
這個時候,Git知道你刪除了文件锌唾,因此锄码,工作區(qū)和版本庫就不一樣了,git status命令會立刻告訴你哪些文件被刪除了晌涕。
$ git status
deleted: test.txt
5.1確認刪除該文件
用命令git rm刪除掉滋捶,并且commit
git rm test.rtf
git commit -m "remove"
這樣文件就從版本庫中刪除了
5.2取消刪除
因為版本庫中還有,恢復到最新版本就好余黎。
$ git checkout -- test.rtf
六 遠程倉庫
6.1關聯遠程倉庫GitHub
首先請自行注冊GitHub賬號重窟。由于你的本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密的,所以請先設置一點東西惧财。
第一步 創(chuàng)建SSH Key巡扇。
在用戶主目錄下,看有沒有.SSH目錄可缚,.文件默認情況下是隱藏的霎迫,具體方法請自行百度。如果有帘靡,看下文件夾里面有沒有id_rsa和id_rsa.pub這兩個文件知给,如果已經有了,就直接一下步描姚,如果沒有就打開Shell涩赢,創(chuàng)建SSH Key:
$ ssh-keygen -t rsa -C "youremail@example.com"
PS:在這里你需要把郵件地址換成你自己的郵件地址,然后一路回車轩勘,密碼也無需設置筒扒。
如果一切順利,就可以在用戶主目錄里面找到.ssh目錄绊寻,里面有上面提到的兩個文件花墩,這兩個是SSH Key的密匙對,id_rsa是私匙澄步,不能泄露出去冰蘑。另外一個id_rsa.pub是公鑰,可以告訴別人
第二步 登陸GitHub
點擊右上角的頭像村缸,選擇“settings”祠肥,“SSH and GPG keys”頁面。然后點“Add SSH Key”,填上任意title 梯皿,然后在下面的KEY文本框里粘貼上id_rsa.pub?文件的內容仇箱。
完成后點擊ADD KEY 县恕,你就可以看到已經添加到的KEY.
6.2 添加遠程庫
現在你已經在本機創(chuàng)建了一個Git倉庫,又想在GitHub上創(chuàng)建一個倉庫并且使兩個倉庫進行遠程同步剂桥。
第一步
登陸GitHub忠烛,然后在右上角頭像的左邊找到?按鈕,選擇 New repository渊额,創(chuàng)建一個新倉庫况木。在name處填入倉庫的名字,其他保持默認旬迹,點擊 create repository按鈕創(chuàng)建一個新的Git倉庫
PS:務必保持兩個倉庫的名字一樣
第二步
在本地的learngit倉庫下運行命令:
$ git remote add origin git@github.com:Fizzyi/learngit.git
把上面的Fizzyi換成你的GitHub賬戶名。
添加后求类,遠程庫的名字就是origin奔垦,這是Git的默認叫法。
第三步
把本地庫的所有內容推送到遠程庫上:
$ git push -u origin master
用git命令尸疆,實際上是把當前分支master推送到遠程庫椿猎。
由于這是第一次推送,我們加上了-u參數寿弱,Git不但會把本地的master分支內容推送的遠程新的master分支犯眠,還會把本地的master分支利和遠程的master分支關聯起來,在以后的推送中就可以簡化命令症革。
成功后筐咧,就可以在GitHub上面看到和本地一模一樣的文件。
從此之后噪矛,只要本地add,commit后量蕊,就可以通過這個命令把本地master分支的最新修改推送到github中。
$ git push origin master
6.3從遠程庫克隆
現在艇挨,假設我們從零開發(fā)残炮,那么最好的方法是先創(chuàng)建遠程庫,然后缩滨,從遠程庫克隆势就。
命令:
$git clone git@github.com:Fizzyi/JS.git
Fizzyi替換成你的GitHub賬號,JS換成你需要克隆的文件夾名稱
分支總結
查看分支:git branch
創(chuàng)建分支:git branch name
切換分支:git checkout name
創(chuàng)建+切換分?=支:git checkout -b name
合并某分支到當前分支:git merge name
刪除分支:git branch -d name
7更新文件
第一步:
git add 更新文件名
第二步:
git commit -m '更新說明'
第三步:
拉取當前分支最新代碼
git pull
第四步:
push到遠程分支master
git push origin master
這樣就成功更新了文件