git在日常開發中是必不可少的工具,本文總結了日常開發常用的git命令
git是什麼?
git是目前世界上最先進的分布式版本控制系統(沒有之一)。
git有什麼特點?簡單來說就是:高階大氣上檔次!
1、git是分布式的,svn不是:這是git和其它非分布式的版本控制系統,例如svn,cvs等,最核心的區別。
2、git把內容按元資料方式儲存,而svn是按檔案:所有的資源控制系統都是把檔案的元資訊隱藏在乙個類似.svn,.cvs等的資料夾裡。
3、git分支和svn的分支不同:分支在svn中一點不特別,就是版本庫中的另外的乙個目錄。
4、git沒有乙個全域性的版本號,而svn有:目前為止這是跟svn相比git缺少的最大的乙個特徵。
5、git的內容完整性要優於svn:git的內容儲存使用的是sha-1雜湊演算法。這能確保**內容的完整性,確保在遇到磁碟故障和網路問題時降低對版本庫的破壞。
$ git config --global user.name "your name"
$ git config --global user.email "[email protected]"
git init
git add .
git commit -m
git status
git diff
初始化乙個git倉庫,使用git init命令。
第一步,使用命令git add .,新增全部 ,注意,可反覆多次使用,新增多個檔案;
第二步,使用命令git commit -m "提交的注釋",完成。
執行git status命令看看結果
執行git diff這個命令可檢視我們修改了什麼內容
前面講了我們把檔案往git版本庫里新增的時候,是分兩步執行的:
因為我們建立git版本庫時,git自動為我們建立了唯一乙個master分支,所以,現在,git commit就是往master分支上提交更改。
你可以簡單理解為,需要提交的檔案修改通通放到暫存區,然後,一次性提交暫存區的所有修改。
git log
git reset --hard commit_id
通過git log來檢視版本(加上--pretty=oneline引數檢視關鍵資訊)。
git中,用head表示當前版本,上乙個版本就是head^,上上乙個版本就是head^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成head~100。
git checkout -- file
git checkout -- readme.txt
git reset head
把readme.txt檔案在工作區的修改全部撤銷,這裡有兩種情況:
總之,就是讓這個檔案回到最近一次git commit或git add時的狀態。
git checkout -- file命令中的--很重要,沒有--,就變成了「切換到另乙個分支」的命令
如果你想要修改,已經git add到暫存區,但還沒有commit的內容。
我們可以使用git reset head 把暫存區的修改撤銷掉(unstage),重新放回工作區。
git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用head時,表示最新的版本。
一般情況下,你通常直接在檔案管理器中把沒用的檔案刪了,或者用rm命令刪了
$ rm test.txt
這個時候,git知道你刪除了檔案,因此,工作區和版本庫就不一致了,git status命令會立刻告訴你哪些檔案被刪除了。
$ git status
on branch master
changes not staged for commit:
(use "git add/rm ..." to update what will be committed)
(use "git checkout -- ..." to discard changes in working directory)
deleted: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
現在你有兩個選擇,
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d46f35e] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
$ git checkout -- test.txt
git checkout其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以「一鍵還原」。
本地倉庫關聯遠端倉庫
$ git remote add origin [email protected]:jack-cool/learngit.git
本地**推送遠端倉庫
$ git push -u origin master
把本地庫的內容推送到遠端,用git push命令,實際上是把當前分支master推送到遠端。
由於遠端庫是空的,我們第一次推送master分支時,加上了-u引數,git不但會把本地的master分支內容推送的遠端新的master分支,還會把本地的master分支和遠端的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。
從遠端倉庫轉殖
$ git clone [email protected]:jack-cool/learngit.git
git支援多種協議,包括https,但通過ssh支援的原生git協議速度最快
檢視分支:git branch
建立分支:git branch 切換分支:git checkout 建立+切換分支:git checkout -b 合併某分支到當前分支:git merge 刪除分支:git branch -d
用git branch命令檢視當前分支
$ git branch
* dev
master
git branch命令會列出所有分支,當前分支前面會標乙個*號。
建立dev分支,然後切換到dev分支
$ git checkout -b dev
switched to a new branch 'dev'
git checkout命令加上-b引數表示建立並切換,相當於以下兩條命令:
$ git branch dev
$ git checkout dev
switched to branch 'dev'
忽略特殊檔案好在git考慮到了大家的感受,這個問題解決起來也很簡單,在git工作區的根目錄下建立乙個特殊的.gitignore檔案,然後把要忽略的檔名
填進去,git就會自動忽略這些檔案。
忽略檔案的原則是:
配置別名(偷懶,敲**很累的。。。)如果敲git st就表示git status那就簡單多了,我們只需要敲一行命令,告訴git,以後st就表示status:
$ git config --global alias.st status
當然還有別的命令可以簡寫,比如co表示checkout,ci表示commit,br表示branch:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
Git基本使用
設定使用者名稱與郵箱 git config global user.name my name git config global user.email my email.com 從已有的git庫中提取 每次更改 的操作 更新本地 到最新版本 需要merge才能合到本地 中 git fetch 合併更...
git基本使用
git pull 從其它的版本庫 既可以是遠端的也可以是本地的 將 更新到本地,例如 git pull origin master 就是將origin這個版本庫的 更新到本地的master主分支。git pull可以從任意乙個git庫獲取某個分支的內容。用法如下 git pull username ...
git基本使用
git pull 從其它的版本庫 既可以是遠端的也可以是本地的 將 更新到本地,例如 git pull origin master 就是將origin這個版本庫的 更新到本地的master主分支。git pull可以從任意乙個git庫獲取某個分支的內容。用法如下 git pull username ...