最先進的分布式版本控制系統(沒有之一)。
cvs和svn,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用
集中式版本控制系統,版本庫是集中存放在**伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從**伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給**伺服器。
分布式版本控制系統根本沒有「**伺服器」,每個人的電腦上都是乙個完整的版本庫,這樣,你工作的時候,就不需要聯網了,因為版本庫就在你自己的電腦上。
那多個人如何協作呢?比方說你在自己電腦上改了檔案a,你的同事也在他的電腦上改了檔案a,這時,你們倆之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。
commit要頻繁,不然無法記錄你的改動
如果你一天commit一次,中間的修改你找不回來
git安裝完成後,還需要最後一步設定,在命令列輸入:
$ git config --global user.name "your name"
$ git config --global user.email "[email protected]"
注意git config
命令的--global
引數,用了這個引數,表示你這台機器上所有的git倉庫
都會 使用這個配置
1.建立版本庫 進入目錄
$ git init
第1步:
git add readme.txt
第2步:把檔案提交到倉庫:git
commit-m "wrote a readme file"
我們繼續修改readme.txt檔案
執行git status
可以讓我們時刻掌握倉庫當前的狀態,可以看到哪些檔案修改過。
看看具體修改了什麼內容,
需要用git diff
這個命令看看
提交修改和提交新檔案是一樣的兩步
,第一步是git add
回退:歷史記錄,用git log
命令檢視,如果嫌輸出資訊太多,
git log --pretty=oneline
git的commit id
不是1,2,3……遞增的數字,而是乙個sha1計算出來的乙個非常大的數字,用十六進製制表示,如果大家都用1,2,3……作為版本號,那肯定就衝突了。
首先,git必須知道當前版本是哪個版本,
在git中,
用head
表示當前版本
,上乙個版本就是head^
,上上乙個版本就是head^^
,當然往上100個版本寫100個^
比較容易數不過來,所以寫成head~100
。
現在,我們要把當前版本回退到上乙個版本
可以使用git reset
命令:
$ git reset--hard head^
git的版本回退速度非常快,因為git在內部有個指向當前版本的head
指標
要恢復上面的操作,
回到未來
:命令git reflog
記錄了你的每一次命令:找到之前的commit id,如
3628164
然後
$ git reset--hard 3628164
工作區(working directory)就是你在電腦裡能看到的目錄,
工作區有乙個隱藏目錄.git
,這個不算工作區,而是git的版本庫。
git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有git
為我們自動建立的第乙個分支
master
,以及指向master
的乙個指標叫head
。
撤銷修改:
git checkout -- file
可以丟棄工作區的修改
命令git checkout -- readme.txt
意思就是,把readme.txt
檔案在工作區的修改全部撤銷,這裡有
兩種情況:
一種是readme.txt
自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt
已經新增到暫存區後,又作了修改,現在,撤銷修改就回到新增到
暫存區後的狀態。
命令中的--
很重要,沒有--
,就變成了「切換到另乙個分支」的命令
如果修改只是新增到了暫存區,還沒有提交,怎麼撤銷:
命令git reset head file
可以把暫存區的修改撤銷掉(unstage),重新放回工作區:
git reset
命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用head
時,表示最新的版本。
場景1:當你改亂了
工作區某個檔案的內容,想直接丟棄工作區的修改時,用命令git checkout -- file
。
場景2:當你不但改亂了工作區某個檔案的內容,還新增到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset head file
,就
回到了場景1
,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠端庫。
刪除檔案
git rm test.txt
然後git commit -m
另一種情況是刪錯了,因為版本庫里還有呢,所以可以很輕鬆地把誤刪的檔案恢復到最新版本:
$ git checkout -- test.txt
git checkout
其實是用版本庫里的版本替換工作區的版本,無論工作區是
修改還是刪除
,都可以「一鍵還原」。
史上最淺顯易懂的Git教程1
最先進的分布式版本控制系統 沒有之一 cvs和svn,這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用 集中式版本控制系統,版本庫是集中存放在 伺服器的,而幹活的時候,用的都是自己的電腦,所以要先從 伺服器取得最新的版本,然後開始幹活,幹完活了,再把自己的活推送給 伺服器。分布式版本控制系統...
史上最淺顯易懂的Git教程2 github
git是分布式版本控制系統,同乙個git倉庫,可以分布到不同的機器上。怎麼分布呢?最早,肯定只有一台機器有乙個原始版本庫,此後,別的機器可以 轉殖 這個原始版本庫,而且每台機器的版本庫其實都是一樣的,並沒有主次之分。實際情況往往是這樣,找一台電腦充當伺服器的角色,每天24小時開機,其他每個人都從這個...
最淺顯易懂的Django系列教程(1) 虛擬環境
到目前位置,我們所有的第三方包安裝都是直接通過pip install xx的方式進行安裝的,這樣安裝會將那個包安裝到你的系統級的python環境中。但是這樣有乙個問題,就是如果你現在用django 1.10.x寫了個 然後你的領導跟你說,之前有乙個舊專案是用django 0.9開發的,讓你來維護,但...