大綱:php
1、前言java
2、概述git
3、在Windows上安裝Gitgithub
4、建立本地倉庫bash
5、本地倉庫管理詳解服務器
6、總結運維
注,注,測試機 CentOS 5.5 x86_64,Git 服務器版本:git version 1.8.2.1,客戶端版本:git version 1.9.2.msysgit.0。全部軟件請到這裏下載:http://msysgit.github.io/。分佈式
1、前言ide
原本呢,其實呢。我覺得Git也就幾個命令,沒什麼難的。因而就到網上找了些文章看看,發現這些文章可貴不知道該說什麼好。不是簡單的寫幾個命令,就是直接複製粘貼手冊中的內容,沒有一點連續感,不知道從何學起。總之呢,我想寫一個什麼都不會的朋友能看懂的、初學朋友能看懂的、運維能看懂的、開發也能看懂的,看完就能幹活的教程。svn
2、概述
這個教程呢,有幾個部分先和你們說一下:
Git 本地倉庫詳解
Git 遠程倉庫詳解
Git 分支管理詳解
Git 標籤管理詳解
GitHub 使用詳解
Git 全局配置詳解
Git與GitHub總結
注,本教程呢,只能讓你會使用Git幹活,至於你呢想深刻了解Git,或者想成爲Git領域的專家喲,我想說這只是個起步。還有我想說Git只是個工具嘛,目的只是爲了提升咱們的工做效率,咱們沒有必要去,也不須要學浪費時間在研究工具上,只要咱們會用就好,嘿嘿!也許有博友不一樣意啊,只是我的看法啊,勿噴啊!
3、在Windows上安裝Git
注,你們請到這裏下載:http://msysgit.github.io/。具體的安裝過程我就不演示了,直接雙擊安裝便可。安裝完成後桌面上會生成一個Git bash圖標,雙擊打開會彈出一個相似命令行窗口的東西,你們請看下圖:
好了,到這裏咱們的Git就安裝完成了,嘿嘿!下面咱們來進行基本配置:
1.
$ git config --global user.name
"Your Name"
2.
$ git config --global user.email 「email@example.com」
注,我這裏根據個人狀況設置以下(如上圖):
1.
$ git config --global user.name
"chenmingqian"
2.
$ git config --global user.email 「mingqian_chen@163.com」
咱們在上一篇文章說過Git是分佈式控制系統,因此,每一個客戶端都必須設置:你的名字和郵箱。這樣才容易區分是哪一個用戶提交的Git版本,嘿嘿!你們能夠看到git config 後面接的是--global參數,這表示你的機器上全部的Git倉庫都會使用這個配置,但你也能夠對不一樣的倉庫指定不一樣的用戶名和郵箱。這個咱們會在後面的文章中講解,這裏不做說明,嘿嘿!有興趣的博友能夠先提早google一下。
4、建立本地倉庫
1.版本庫又稱倉庫
版本庫或者是倉庫,英文名Repository,其實啊說白了就是一個目錄並且,這個目錄中的因此文件都被git管理並且,無論你作什麼操做都會被記錄,包括:增長、刪除、修改文件等,都會被記錄下來,以便後來跟蹤與修改相關記錄,甚至被還原。好了,下面咱們就在咱們客戶端(我這裏演示的是Windows客戶端,其它客戶端操做同樣)中建立一個版本庫:
你們能夠看到咱們在/c/Users/root/下建立一個空目錄pro便可project簡寫。還有一點須要說明的在Windows系統中目錄名稱不要使用中文,否則會出現神馬問題,我不負責。嘿嘿^_^……
2.目錄變成倉庫
執行git init命令,便可Initialized empty Git repository in c:/Users/root/pro/.git/,初始化一個空目錄,路徑爲c:/Users/root/pro/.git/。你們能夠看到pro目錄中生成了一個隱藏目錄 .git目錄,進入目錄中你們能夠看到裏面有不少文件,沒事不要修改或者改動裏機的文件,這裏面的文件就是控制和管理版本庫的,嘿嘿。至於裏文件的具體做用咱們會在後面的文章中講解,想提早了解的朋友能夠先google一下。
3.向本地倉庫中增長文件
下面咱們向版本庫中增長文件,須要注意的是,在版本庫中只能跟蹤和管理文本文件,比txt文件、js文件、php文件、java文件等,全部的程序代碼均可以的。可是像視頻、圖片等這些二進制文件,雖然能由git管理,可是隻能記錄大小,沒法跟蹤具體修改了什麼,嘿嘿。你們懂了吧。好了,下面咱們來增長一個readme.txt文件,其內容以下:
1.
This is git
test
.
2.
Git is a version of the best controller.
3.
……
注意,新建的readme.txt文件,必定要在pro目錄,否則git沒法管理這裏文件哦,嘿嘿!下面咱們把個文件放到版本庫中。
1).git status 命令
咱們先用git status命令查看一下,如上圖。你們能夠看到git記錄咱們新增長一個文件readme.txt,而且提示這個文件尚未被提交。下面咱們用git add命令提交一下。
2).git add 命令
git add 命令是告訴git,咱們要把什麼文件提交到倉庫中去,你們能夠看咱們執行git add readme.txt命令後,沒有任何提示。那就說明咱們提交完成了。下面咱們經過git commit命令,將readme.txt文件提交到版本庫中。
3).git commit 命令
1.
$ git commit -m
"add readme.txt"
2.
[master (root-commit) e5d662b] add readme.
3.
1
file
changed, 3 insertions(+)
4.
create mode 100644 readme.txt
你們能夠看到咱們用git commit命令提交readme.txt文件,給出的提示是 1 file changed, 3 insertions(+),一個文件改變,插入了三行內容。與咱們上面增長三行內容一致。嘿嘿!下面咱們簡單的說明一下git commit命令,其中的參數-m後面輸入的是本次提交的版本說明,能夠輸入任意內容,但須要說明的是,最好寫有意義的說明,便於之後查看。
4).git status 命令
最後咱們再用git status命令查看一下版本庫的狀態,提示沒有任何內容須要提交說明咱們向版本庫增長文件成功了,嘿嘿。
4.總結
1).初始化一個Git倉庫,使用git init命令
2).添加文件到本地Git倉中,分爲兩步:
使用git add命令,注意,能夠屢次使用,添加多個文件
使用git commit命令,完成添加。
爲何Git添加文件須要兩步呢?一步add,一步commit。嘿嘿,由於commit命令能夠一次提交多個文件,因此你能夠屢次使用add命令呢。下面是個案例:(咱們也常常這麼用)
1.
$ git add file1.php
2.
$ git add file2.php
3.
$ git add file3.php
4.
$ git commit –m 「add file1.php file2.php file3.php」
好了,到這裏咱們建立本地git倉庫和向倉庫中增長文件的內容就講解完成了,下面咱們來詳細講解一下Git本地倉庫的管理,內容有點多請你們慢慢看,嘿嘿!
5、本地倉庫管理詳解
1.查看工做區的狀態(git status)
在上面的文章中咱們成功的增長了一個readme.txt文件,並用git status命令查看了狀態,在這節中咱們就詳細的說一下git status命令。咱們修改一下readme.txt中的內容以下:
1.
This is git
test
.
2.
Git is a version of the best conntroller.
咱們刪除了最後一行,如今咱們再用git status命令查看一下狀態:
從上圖中咱們能夠看到,咱們用git status命令查看一下,咱們得知readme.txt文件被修改過了,可是尚未提交這個修改。可是有博友會問了,git提示咱們這個readme.txt這個文件被修改了,但咱們想看看具體修改了什麼內容怎麼辦呢?這個時候咱們須要git diff命令出場了,以下圖:
你們能夠從上面圖片中能夠看到,咱們刪除了最後一行的……省略號。嘿嘿,用紅顏色標出來的。好了知道修改了什麼,下面咱們就提交修改吧,提交修改和提交新文件一致,也是兩步,先add,再commit。以下圖:
你們能夠看到咱們執行git add命令,一樣沒人輸出。可是,咱們能夠用git status命令查看一下。下面咱們用git commit命令提交到本地版本庫,以下圖:
一樣的咱們使用git status命令查看一下狀得知咱們修改的readme.txt文件已提交。好了,到這裏咱們的git status命令就講解完成了,同時咱們也講解一個git diff命令,能夠查看咱們修改了哪些內容。下面咱們來說解一下版本回滾。
2.版本回滾
在上面一個章節中咱們演示修改文件並提交文件,再用git status命令查看狀態,下咱們再修幾個版本並提交:
好了,就這樣咱們不斷的修改並提交到本地的版本庫中。一會你測試的時候發現前修改的版本有問題想回滾到前面的版本,或者你誤刪除了一些文件,想回到上一個commit中去,而後繼續工做。咱們應該怎麼辦呢?在Git版本控制中,咱們全部的操做都是有歷史記錄的,咱們用git log命令查看一下(以下圖):
你們能夠看到,用git log命令能夠查看最近幾回提交的版本。若是你發現內容太多,能夠用這個命令查看(以下圖):
上面你看到的一大串數字,實際上是commit id(即,版本號),和svn不同,Git的commit id不是1,2,3……這樣的遞數字,而是一相SHA1計算出來的哈希數,用16進製表示。有博友會問了,爲何Git的commit id不是1,2,3……這樣的遞增數字,而是用SHA1算出來的哈希數來表示呢?你們應該知道Git是分佈式管理系統,咱們會有多我的同時開發,若是你們都用1,2,3……這樣的遞增數字,做爲版本號,那不就衝突了嘛,嘿嘿。好了,下面咱們來講版本回滾,準備把readme.txt回滾到「add readme.txt「的那個版本,咱們應該怎麼作?
咱們先來講一下,Git的當前是在哪一個版本,在Git中咱們用HEAD表示當前版本,也就是咱們最新提交的」749f84ccb87……ff2q6ad「,上一個版本就應該這麼表示」HEAD^「,再上一個版本就這樣表示」HEAD^^「,固然若是有幾十個版本或者1000個版本,咱們還要寫1000個^,這是不可能的,因此喲。咱們寫成這樣HEAD~1000。好了,如今咱們就用git reset命令,將咱們的版本回退到」add readme.txt「中吧,以下圖:
你們能夠看到,咱們回到了」add readme.txt「版本中了,下面咱們再來查看一下git log,以下圖:
有個問題哦,有沒有發現咱們最後提交的那個版本不見了,如上圖。如今只有三個版本了,這說明什麼問題呢?舉個簡單的例子說明一下,就比如你從如今回到了18世界,想再回到21世界已經回不去了,那應該怎麼辦呢?只要咱們找到最新版本的commit id,我這裏新版本的commit id是」749f84ccb87……ff2q6ad「,因而就能夠回到將來的某個版本,就比如咱們知道如今的時間,就能回到如今。下面咱們來演示一下(以下圖):
好了,你們能夠看到咱們又回到最新版本,嘿嘿。如今你回退到某個版本中,已經關掉了Git bash。可是呢,你又後悔了,想恢復到新版本中,可是呢?你又找不到commit id了,那又該怎麼辦呢?在Git中,咱們當時用$ git reset --hard HEAD^^^,回退到「add readme.txt」版本時,再想恢復到最新版的 「add a line distributed」 中,必須有commit id才行,這時咱們已經關閉了Git bash。在Git中提供了一個git reflog命令,是用來記錄你每一次執行的命令,下面咱們來演示一下(以下圖):
嘿嘿,如今咱們又能夠回去最新版了。好了,到這裏咱們的回滾版本就講解完成了。下面咱們來講一下,工做區、提交區/暫存區(stage/index)、版本庫。
3.工做區、提交區/暫存區(stage/index)、版本庫
其實呢,工做區、提交區/暫存區(stage/index)、版本庫的概念問題,從上圖中就能看的很清楚,原本不想細講的,但想一想仍是說一下。Git與其餘版本版本控制器其中之一的不一樣之處就在於有提交區/暫存區(stage/index)的概念。下面咱們先來看一下工做區:
其實呢,工做區就是咱們開發目錄了,在電腦中是可能看到的,好比咱們這裏的pro目錄,就是一個工做區。你們再來看一下,下面的兩張圖:
你們能夠看到,工做區中有個隱藏的目錄「.git」,這個不是工做區哦,這個就是Git的版本庫。你們再看下面兩張圖:
你們能夠看到,在「.git」目錄中有不少文件,其中一個重要的文件index,就是咱們說的提交區/暫存區(stage/index)。暫存區(stage, index)是 Git 最重要的概念之一,理解了這個概念不少 Git 命令就再也不那麼神祕了。對於 Git 暫存區(stage) ,不知道您的感想如何?
圖中左側爲工做區,右側爲版本庫。在版本庫中標記爲 "index" 的區域是暫存區(stage/index),標記爲 "master" 的是 master 分支所表明的目錄樹(關於分支問題在下面的文章中會詳解)。
圖中咱們能夠看出此時 "HEAD" 實際是指向 master 分支的一個「指針」。因此,圖示的命令中出現 HEAD 的地方能夠用 master 來替換(HEAD的概念咱們在後面的文章中也會詳解)。
圖中的 objects 標識的區域爲 Git 的對象庫,實際位於 ".git/objects" 目錄下,咱們會在後面的文章中將重點介紹,嘿嘿!。
當對工做區新增或修改的文件執行 "git add" 命令時,暫存區的目錄樹被更新,同時工做區新增或修改的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。(如上圖)
當執行提交操做 "git commit" 時,暫存區的目錄樹寫到版本庫的對象庫(objects)中,master 分支會作相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。(如上圖)
當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,可是工做區不受影響。 當執行 "git rm --cached <file>" 命令時,會直接從暫存區刪除文件,工做區則不作出改變。
當執行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動。
當執行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時,會用 HEAD 指向的 master 分支中的所有或者部分文件替換暫存區和以及工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改動。
好了,到這裏咱們的工做區、暫存區、版本庫就講解到這裏了,因爲本人能力有限有什麼不正確的地方歡迎你們指出。好了,下面咱們繼續講解……
4.修改管理
1).關於修改
在上面的文章中咱們講解了工做區、暫存區和版本庫的概念,有了這些概念有理解。下面咱們說一說爲何Git比其它版本控制軟件優秀?嘿嘿,是由於Git跟蹤管理的是咱們每一次的修改(或操做),而不是文件。好比你新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字符,也是一個修改,刪了一些又加了一些,也是一個修改,甚至建立一個新文件,也算一個修改。下面咱們來簡單演示一下:咱們先查看一下readme.txt文件,以下圖:
下面咱們修改一下readme.txt內容,增長一行:Git rest 1.以下圖:
下面咱們用 git add 命令提交一下,以下圖:
下面咱們再修改一下readme.txt文件,以下圖:
咱們又增長一行 Git test 2. 以下圖:
、
下面咱們提交一下,以下圖:
下面咱們再查看一下狀態,以下圖:
你們能夠看到咱們第二次沒有被提交,怎麼會這樣呢?細心的博友能夠看到咱們第二次修改後,直接執行 git commit了。沒有執行 git add 命令,前面咱們說了,當你用「git add」命令後,在工做區的第一次修改被放入暫存區,準備提交。可是,在工做區的第二次修改並無放入暫存區,因此,「git commit」只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。下面咱們用 git diff 命令查看一下工做區與版本庫裏面的區別:
你們能夠從圖上看到,咱們增長 Git test 2. 尚未提交,嘿嘿!那麼第二次修改怎麼提交呢?其實咱們再add再commit,就能夠了。以下圖:
好了,如今,你又理解了Git是如何跟蹤修改的,每次修改,若是不add到暫存區,那就不會加入到commit中。那麼咱們想取消修改的版本,又該怎麼取消呢?下面咱們繼續……
2).取消(撤消)修改
下面咱們來說解怎麼撤消修改,通常狀況下咱們是不會出錯的,可是項目比較緊,總是有人在催你(這個你懂的),忽然出錯了,咱們想取消修改那又怎麼辦呢?以下圖:
在你要提交以前,你發如今有錯誤了,應該是101。既然錯誤發現得很及時,就能夠很容易地糾正它。你能夠刪掉最後一行,手動把文件恢復到上一個版本的狀態。我信先用git status查看一下,以下圖:
如上圖,Git會告訴你有你個文件被修改,你有兩個選擇,一個用 git add 提交到暫存區,另外一個是用git checkout能夠丟棄工做區的修改。命令git checkout -- readme.txt意思就是,把readme.txt文件在工做區的修改所有撤銷,這裏有兩種狀況:
當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file。
當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了第1步,第二步按第1步進行操做,就是執行一下git checkout -- file。
已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考咱們前面講解的版本回退,不過前提是沒有推送到遠程庫。嘿嘿,祝你回退成功。
好了,撤消管理咱們已經講了不少了,下面咱們來講一下文件刪除的問題,終於快通關了。嘿嘿……
5.文件刪除
刪除文件就比較簡單了,咱們快速的過一下了,嘿嘿!下面咱們新增長一個文件並提交到Git版本庫中,以下圖:
通常咱們直接在目錄中把沒用的文件刪了,或者用rm命令刪了,下面咱們來演示一下:
你們能夠看到,咱們用 git status 查看一下狀態,如今咱們有兩個選擇,一個是從版本庫中刪除該文件,就 git rm 命令刪除掉並用 git commit提交,另外一種狀況刪錯了,由於版本庫裏還有因此能夠很容易的恢復。下面咱們來演示一下狀況1:
好了,下面咱們來看一下狀況2:
git rm 命令用於刪除一個文件。若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。
一種是readme.txt自修改後尚未被放到暫存區,如今撤銷修改就回到和版本庫如出一轍的狀態;
另外一種是readme.txt已經添加到暫存區後,又做了修改,如今撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。下面咱們來演示一下,以下圖:
你們能夠看一下 readme.txt 文件果真還原到上一個版本了,嘿嘿!你們注意哦,git checkout -- file命令中的「--」很重要,沒有「--」,就變成了「建立一個新分支」的命令,咱們在後面的文章中將詳細講解分支管理。真是禍不單行啊,咱們不但程序寫錯了,還 git add 到暫存區了,以下圖:
無論怎麼樣,咱們先查看一下狀態吧,以下圖:
你們能夠看到Git告訴咱們,用 git reset HEAD file 能夠把暫存區中的修改撤消掉,從新放回工做區,以下圖:
git reset命令既能夠回退版本,也能夠把工做區的某些文件替換爲版本庫中的文件。當咱們用HEAD時,表示最新的版本。咱們再用 git status 查看一下發現,如今的暫存區是乾淨的,工做區有修改。
那說明咱們撤消成功,嘿嘿!下面咱們再執行 git checkout命令撤消工做區修改,以下圖:
好了,到這裏咱們終於撤消回來了,嘿嘿。如今,假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麼辦呢?還記得版本回退一節嗎?能夠回退到上一個版本。不過,這是有條件的,就是你尚未把本身的本地版本庫推送到遠程。還記得Git是分佈式版本控制系統嗎?咱們後面會講到遠程版本庫,一旦你把錯誤提交推送到遠程版本庫,你就真的慘了……你們當心就好,哈哈……好了,下面咱們來總結一下:
「被眼花繚亂的 Git 魔法完全搞糊塗了?」
「Git 爲何這麼折磨人,修改的文件直接提交不就完了麼?」
「看不出 Git 這麼作有什麼好處?」
我認爲 Git 暫存區(stage或稱爲 index)的設計是 Git 最成功的設計之一,也是最難理解的一個設計。 在版本庫(.git)目錄下,有一個 index 文件,相信你們在上圖中已經看到了。下面咱們好好說一說他們之間關係,一樣的咱們先看一張圖:
在上圖中,咱們能夠看到部分 Git 命令是如何影響工做區和暫存區(stage/index)的。
圖中左側爲工做區,右側爲版本庫。在版本庫中標記爲 "index" 的區域是暫存區(stage/index),標記爲 "master" 的是 master 分支所表明的目錄樹(關於分支問題在下面的文章中會詳解)。
圖中咱們能夠看出此時 "HEAD" 實際是指向 master 分支的一個「指針」。因此,圖示的命令中出現 HEAD 的地方能夠用 master 來替換(HEAD的概念咱們在後面的文章中也會詳解)。
圖中的 objects 標識的區域爲 Git 的對象庫,實際位於 ".git/objects" 目錄下,咱們會在後面的文章中將重點介紹,嘿嘿!。
當對工做區新增或修改的文件執行 "git add" 命令時,暫存區的目錄樹被更新,同時工做區新增或修改的文件內容被寫入到對象庫中的一個新的對象中,而該對象的ID被記錄在暫存區的文件索引中。(如上圖)
當執行提交操做 "git commit" 時,暫存區的目錄樹寫到版本庫的對象庫(objects)中,master 分支會作相應的更新。即 master 指向的目錄樹就是提交時暫存區的目錄樹。(如上圖)
當執行 "git reset HEAD" 命令時,暫存區的目錄樹會被重寫,被 master 分支指向的目錄樹所替換,可是工做區不受影響。 當執行 "git rm --cached <file>" 命令時,會直接從暫存區刪除文件,工做區則不作出改變。
當執行 "git checkout ." 或者 "git checkout -- <file>" 命令時,會用暫存區所有或指定的文件替換工做區的文件。這個操做很危險,會清除工做區中未添加到暫存區的改動。
當執行 "git checkout HEAD ." 或者 "git checkout HEAD <file>" 命令時,會用 HEAD 指向的 master 分支中的所有或者部分文件替換暫存區和以及工做區中的文件。這個命令也是極具危險性的,由於不但會清除工做區中未提交的改動,也會清除暫存區中未提交的改動。
好了,到這裏咱們的工做區、暫存區、版本庫就講解到這裏了,因爲本人能力有限有什麼不正確的地方歡迎你們指出。好了,下面咱們繼續講解……
4.修改管理
1).關於修改
在上面的文章中咱們講解了工做區、暫存區和版本庫的概念,有了這些概念有理解。下面咱們說一說爲何Git比其它版本控制軟件優秀?嘿嘿,是由於Git跟蹤管理的是咱們每一次的修改(或操做),而不是文件。好比你新增了一行,這就是一個修改,刪除了一行,也是一個修改,更改了某些字符,也是一個修改,刪了一些又加了一些,也是一個修改,甚至建立一個新文件,也算一個修改。下面咱們來簡單演示一下:咱們先查看一下readme.txt文件,以下圖:
下面咱們修改一下readme.txt內容,增長一行:Git rest 1.以下圖:
下面咱們用 git add 命令提交一下,以下圖:
下面咱們再修改一下readme.txt文件,以下圖:
咱們又增長一行 Git test 2. 以下圖:
、
下面咱們提交一下,以下圖:
下面咱們再查看一下狀態,以下圖:
你們能夠看到咱們第二次沒有被提交,怎麼會這樣呢?細心的博友能夠看到咱們第二次修改後,直接執行 git commit了。沒有執行 git add 命令,前面咱們說了,當你用「git add」命令後,在工做區的第一次修改被放入暫存區,準備提交。可是,在工做區的第二次修改並無放入暫存區,因此,「git commit」只負責把暫存區的修改提交了,也就是第一次的修改被提交了,第二次的修改不會被提交。下面咱們用 git diff 命令查看一下工做區與版本庫裏面的區別:
你們能夠從圖上看到,咱們增長 Git test 2. 尚未提交,嘿嘿!那麼第二次修改怎麼提交呢?其實咱們再add再commit,就能夠了。以下圖:
好了,如今,你又理解了Git是如何跟蹤修改的,每次修改,若是不add到暫存區,那就不會加入到commit中。那麼咱們想取消修改的版本,又該怎麼取消呢?下面咱們繼續……
2).取消(撤消)修改
下面咱們來說解怎麼撤消修改,通常狀況下咱們是不會出錯的,可是項目比較緊,總是有人在催你(這個你懂的),忽然出錯了,咱們想取消修改那又怎麼辦呢?以下圖:
在你要提交以前,你發如今有錯誤了,應該是101。既然錯誤發現得很及時,就能夠很容易地糾正它。你能夠刪掉最後一行,手動把文件恢復到上一個版本的狀態。我信先用git status查看一下,以下圖:
如上圖,Git會告訴你有你個文件被修改,你有兩個選擇,一個用 git add 提交到暫存區,另外一個是用git checkout能夠丟棄工做區的修改。命令git checkout -- readme.txt意思就是,把readme.txt文件在工做區的修改所有撤銷,這裏有兩種狀況:
當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file。
當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了第1步,第二步按第1步進行操做,就是執行一下git checkout -- file。
已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考咱們前面講解的版本回退,不過前提是沒有推送到遠程庫。嘿嘿,祝你回退成功。
好了,撤消管理咱們已經講了不少了,下面咱們來講一下文件刪除的問題,終於快通關了。嘿嘿……
5.文件刪除
刪除文件就比較簡單了,咱們快速的過一下了,嘿嘿!下面咱們新增長一個文件並提交到Git版本庫中,以下圖:
通常咱們直接在目錄中把沒用的文件刪了,或者用rm命令刪了,下面咱們來演示一下:
你們能夠看到,咱們用 git status 查看一下狀態,如今咱們有兩個選擇,一個是從版本庫中刪除該文件,就 git rm 命令刪除掉並用 git commit提交,另外一種狀況刪錯了,由於版本庫裏還有因此能夠很容易的恢復。下面咱們來演示一下狀況1:
好了,下面咱們來看一下狀況2:
git rm 命令用於刪除一個文件。若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容
一種是readme.txt自修改後尚未被放到暫存區,如今撤銷修改就回到和版本庫如出一轍的狀態;
另外一種是readme.txt已經添加到暫存區後,又做了修改,如今撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。下面咱們來演示一下,以下圖:
你們能夠看一下 readme.txt 文件果真還原到上一個版本了,嘿嘿!你們注意哦,git checkout -- file命令中的「--」很重要,沒有「--」,就變成了「建立一個新分支」的命令,咱們在後面的文章中將詳細講解分支管理。真是禍不單行啊,咱們不但程序寫錯了,還 git add 到暫存區了,以下圖:
無論怎麼樣,咱們先查看一下狀態吧,以下圖:
你們能夠看到Git告訴咱們,用 git reset HEAD file 能夠把暫存區中的修改撤消掉,從新放回工做區,以下圖:
git reset命令既能夠回退版本,也能夠把工做區的某些文件替換爲版本庫中的文件。當咱們用HEAD時,表示最新的版本。咱們再用 git status 查看一下發現,如今的暫存區是乾淨的,工做區有修改。
那說明咱們撤消成功,嘿嘿!下面咱們再執行 git checkout命令撤消工做區修改,以下圖:
好了,到這裏咱們終於撤消回來了,嘿嘿。如今,假設你不但改錯了東西,還從暫存區提交到了版本庫,怎麼辦呢?還記得版本回退一節嗎?能夠回退到上一個版本。不過,這是有條件的,就是你尚未把本身的本地版本庫推送到遠程。還記得Git是分佈式版本控制系統嗎?咱們後面會講到遠程版本庫,一旦你把錯誤提交推送到遠程版本庫,你就真的慘了……你們當心就好,哈哈……好了,下面咱們來總結一下:
當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file。
當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了第1步,第二步按第1步進行操做,就是執行一下git checkout -- file。
已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考咱們前面講解的版本回退,不過前提是沒有推送到遠程庫。嘿嘿,祝你回退成功。
好了,撤消管理咱們已經講了不少了,下面咱們來講一下文件刪除的問題,終於快通關了。嘿嘿……
5.文件刪除
刪除文件就比較簡單了,咱們快速的過一下了,嘿嘿!下面咱們新增長一個文件並提交到Git版本庫中,以下圖:
通常咱們直接在目錄中把沒用的文件刪了,或者用rm命令刪了,下面咱們來演示一下:
你們能夠看到,咱們用 git status 查看一下狀態,如今咱們有兩個選擇,一個是從版本庫中刪除該文件,就 git rm 命令刪除掉並用 git commit提交,另外一種狀況刪錯了,由於版本庫裏還有因此能夠很容易的恢復。下面咱們來演示一下狀況1:
好了,下面咱們來看一下狀況2:
git rm 命令用於刪除一個文件。若是一個文件已經被提交到版本庫,那麼你永遠不用擔憂誤刪,可是要當心,你只能恢復文件到最新版本,你會丟失最近一次提交後你修改的內容。
1.代碼下載
方法1:經過tortoiseGit 工具下載,咱們新建一個work文件夾,而後點擊右鍵,選擇 Git clone,url中輸入代碼服務器地址,點擊OK下載項目文件。
方法2:經過命令行下載 git clone #url#
2.分支切換
右擊項目名,選擇Git Bash,出現以下界面,而後輸入
1)git checkout member_branch_2_0 ,則切換到member_branch_2_0分支
2)切換回主分支 git checkout master
3)建立一個叫作 「test_x」 的分支並切換過去
git checkout -b test_x
刪除分支 git branch -d test_x
3.更新本地倉庫至最新改動
git pull 若致使衝突(conflicts),則手動人肉合併衝突,改完後執行 git add #filename#命令標記爲衝突已解決。 合併改動前可以使用
git diff #source_branch# #target_branch#命令進行查看